Articulation Points
Posted By Swaroop on Friday, 9 September 2022
class Solution
{
int[] timeOfInsertion, low;
boolean[] vis;
Set<Integer> set;
int timer;
public void articulationPoints(int V,ArrayList<ArrayList<Integer>> adj){
timeOfInsertion = new int[V];
low = new int[V];
vis = new boolean[V];
set = new TreeSet<>();
timer = 1;
for(int i=0;i<V;i++){
if(!vis[i])
dfs(adj, 0, -1);
}
System.out.println(set);
}
public void dfs(ArrayList<ArrayList<Integer>> adj, int u, int parent){
vis[u] = true;
timeOfInsertion[u] = low[u] = timer++;
int child = 0;
for(int v : adj.get(u)){
if(v == parent) continue;
if(!vis[v]){
child++;
dfs(adj, v, u);
low[u] = Math.min(low[u], low[v]);
if(low[v] >= timeOfInsertion[u] && parent != -1)
set.add(u);
}else low[u] = Math.min(low[u], timeOfInsertion[v]);
}
if(parent == -1 && child > 1)
set.add(u);
}
}