Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int tim=0;
- vector<bool> vis;
- vector<int> tin,low;
- set<int> ans;
- vector<int> adj[100005];
- void dfs(int v,int p)
- {
- low[v]=tin[v]=tim++;
- vis[v]=1;
- int c=0;
- for(auto u:adj[v])
- {
- if(u==p) continue;
- if(vis[u]) low[v]=min(low[v],tin[u]);
- else
- {
- dfs(u,v);
- c++;
- low[v]=min(low[v],low[u]);
- if(low[u]>=tin[v] and p!=-1) ans.insert(v);
- }
- }
- if(p==-1 and c>1) ans.insert(v);
- }
- int main()
- {
- int n,m;
- cin>>n>>m;
- for(int i=0;i<m;i++)
- {
- int a,b;
- cin>>a>>b;
- adj[a].push_back(b);
- adj[b].push_back(a);
- }
- vis.assign(n+1,0);
- tin.assign(n+1,-1);
- low.assign(n+1,-1);
- for(int i=0;i<n;i++)
- {
- if(!vis[i]) dfs(i,-1);
- }
- for(int i:ans) cout<<i<<' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement