[JAVA] easy-understanding solution!! (91%)
\nclass Solution {\n    static int time = 0;\n    static List<Integer>[] network;\n    static int[] lowestVertex; //lowest vertext from current vertex\n    stat
```\nclass Solution {\n    static int time = 0;\n    static List<Integer>[] network;\n    static int[] lowestVertex; //lowest vertext from current vertex\n    static int[] discoveredTime; //discovered time of vertext\n    static boolean[] visited;\n    static List<List<Integer>> critialConnections;\n\n    public static List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {\n\n        initialization(n);\n        buildNetwork(connections);\n        getCritialConnections(0, -1);\n\n        return critialConnections;\n    }\n\n    public static void initialization(int n) {\n        lowestVertex = new int[n];\n        discoveredTime = new int[n];\n        visited = new boolean[n];\n        critialConnections = new ArrayList<>();\n\n        network = new ArrayList[n];\n        for(int i=0; i<n; i++) network[i] = new ArrayList<>();\n    }\n\n    public static void buildNetwork(List<List<Integer>> connections) {\n        for(List<Integer> connection :connections) {\n            network[connection.get(0)].add(connection.get(1));\n            network[connection.get(1)].add(connection.get(0));\n        }\n    }\n\n    //dfs search\n    public static void getCritialConnections(int current, int parent) {\n\n        time++;\n        lowestVertex[current] = time;\n        discoveredTime[current] = time;\n        visited[current] = true;\n\n        for(int neighbor : network[current]) {\n            if(neighbor == parent) continue;\n\n            if(visited[neighbor] == false) { //if it does not discovered\n\n                getCritialConnections(neighbor, current);\n\n                lowestVertex[current] = Math.min(lowestVertex[current], lowestVertex[neighbor]);\n\n                /**\n                 * lowestVertex of neighbor > current\'s discoveredTime => critical connection!!\n                 * lowestVertex of neighbor <= current\'s discoveredTime\n                 * => not critical connection. there is a circular network.\n                 */\n                if(lowestVertex[neighbor] > discoveredTime[current]) {\n                    critialConnections.add(Arrays.asList(current, neighbor));\n                }\n            } else { //if this neighbor is already visited, lowerVertext of current will be updated!!\n                lowestVertex[current] = Math.min(lowestVertex[current], discoveredTime[neighbor]);\n            }\n        }\n    }\n}\n```
['Depth-First Search', 'Java']