Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n,m;
- vector<vector<int> > g;
- vector<int> tin,fup;
- vector<char> used;
- int timer=0;
- vector<int> c;
- void is_cutpoint(int v) {
- c.push_back(v);
- }
- void dfs(int v,int p=-1) {
- used[v]=true;
- tin[v]=fup[v]=timer++;
- int children=0;
- for (int i=0;i<(int)g[v].size();++i) {
- int to=g[v][i];
- if (to==p) continue;
- if (used[to]) {
- fup[v]=min(fup[v],tin[to]);
- } else {
- dfs(to,v);
- fup[v]=min(fup[v],fup[to]);
- if (fup[to]>=tin[v] && p!=-1)
- is_cutpoint(v);
- ++children;
- }
- }
- if (p==-1 && children>1)
- is_cutpoint(v);
- }
- int main(int argc, char **argv)
- {
- cin >> n >> m;
- g.resize(n);
- used.resize(n,false);
- tin.resize(n),fup.resize(n);
- for (int i=0;i<m;++i) {
- int u,v;
- cin >> u >> v;
- --u,--v;
- g[u].push_back(v);
- g[v].push_back(u);
- }
- dfs(0);
- sort(c.begin(),c.end());
- cout << (int)c.size() << endl;
- for (int i=0;i<(int)c.size();++i)
- cout << c[i]+1 << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement