#include <algorithm> #include <cstdio> #include <iostream> #include <vector> #define ALL(v) v.begin(),v.end() using namespace std; int t[100005],lowlink[100005],step; vector<int> mp[100005]; bool ans[100005]; void dfs(int now,int fa){ int child=0; step++; t[now]=step; lowlink[now]=step; for(int i=0;i<mp[now].size();i++) if(!t[mp[now][i]]){ child++; dfs(mp[now][i],now); lowlink[now]=min(lowlink[now],lowlink[mp[now][i]]); if(lowlink[mp[now][i]]>=t[now])ans[now]=true; } else if(mp[now][i]!=fa) lowlink[now]=min(lowlink[now],t[mp[now][i]]); if(child==1&&fa<0)ans[now]=false; } int main(){ int n,m; ios::sync_with_stdio(false); cin>>n>>m; while(m--){ int a,b; cin>>a>>b; mp[a].push_back(b); mp[b].push_back(a); } for(int i=1;i<=n;i++) if(!t[i]) dfs(i,-1); int N=0; for(int i=1;i<=n;i++) if(ans[i])N++; cout<<N<<endl; for(int i=1;i<=n;i++) if(ans[i]) cout<<i<<‘ ‘; return 0; }
时间: 2024-10-16 01:58:26