tarjan:(这是我写的一版 但是为什么超时啊
class Solution {
public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {
List<List<Integer>> c = new ArrayList<>();
List<List<Integer>> res = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
return tarjan(-1,0,0,new int[n],new int[n],stack,c,connections);
}
private List<List<Integer>> tarjan(int par, int u, int time,int[]dfn, int[] low, Stack<Integer> stack,List<List<Integer>> res,List<List<Integer>> connections){
dfn[u] = low[u] = time;
stack.push(u);
for(List<Integer> connection:connections){
int v = -1;
if(connection.get(0)==u){
v = connection.get(1);
}else if(connection.get(1)==u){
v = connection.get(0);
}
if(v!=-1){
if(v==par){
continue;
}else if(!stack.contains(v)){
tarjan(u, v,time+1,dfn,low,stack,res,connections);
low[u]= low[v]<low[u]?low[v]:low[u];
}else{
low[u]= low[v]<low[u]?low[v]:low[u];
}
}
}
if(dfn[u]==low[u]){
List<Integer> curc = new ArrayList<>();
while(!stack.isEmpty()){
int n = stack.pop();
if(n==u){
break;
}
}
if(par!=-1){
curc.add(u);
curc.add(par);
res.add(curc);
}
}
return res;
}
}