RT,有dalao能帮萌新看看吗
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,cnt,check[20005],ans;
int low[20005],dfn[20005];
vector<int>ve[20005];
void tarjan(int now,int fa) {
dfn[now]=low[now]=++cnt;
int ch=0;
for(int i=0; i<ve[now].size(); i++) {
int y=ve[now][i];
if(!dfn[y]) {
tarjan(y,fa);
low[now]=min(low[now],low[y]);
if(low[y]>=dfn[now]&&now!=fa)check[now]=true;
if(now==fa)ch++;
}
low[now]=min(low[now],dfn[y]);
}
if(ch>=2&&u==fa)check[now]=true;
}
int main() {
scanf("%d%d",&n,&m);
while(m--) {
scanf("%d%d",&u,&v);
ve[u].push_back(v);
ve[v].push_back(u);
}
for(int i=1; i<=n; i++)
if(!dfn[i])tarjan(i,i);
for(int i=1; i<=n; i++)
ans+=check[i];
printf("%d\n",ans);
for(int i=1; i<=n; i++)
if(check[i])printf("%d ",i);
puts("");
}