diff --git a/graph/articulationpnt.cpp b/graph/articulationpnt.cpp new file mode 100644 index 0000000..5dcf35f --- /dev/null +++ b/graph/articulationpnt.cpp @@ -0,0 +1,44 @@ +#include +using namespace std; +int timer=0; +void dfs(int node,int par,vector &in,vector &low,vector &vis,vector adj[]){ + vis[node]=true; + in[node]=low[node]=timer; + timer++; + int children=0; + for(auto child:adj[node]){ + if(child == par) + continue; + else if(vis[child]){ + // the edge node-child is a back edge + low[node]=min(low[node],in[child]); + } + else{ + dfs(child,node,in,low,vis,adj); + if(low[child] >= in[node] && par != -1){ + // for 1 based numbering + cout< 1 && par == -1){ + cout<>n>>e; + vector adj[n]; + for(int i=0;i>u>>v; + adj[u-1].push_back(v-1); + adj[v-1].push_back(u-1); + } + vector in(n),low(n); + vector vis(n,false); + dfs(0,-1,in,low,vis,adj); + return 0; +}