代码如下 求调:
//在无向连通图中,如果结点 u 被去除后,原无向连通图不再联通,则称点 u 为割点
#include<iostream>
#include<vector>
using namespace std;
int n,m,head[100001],dfn[100001],low[100001],index,d[100001];
bool book[100001];
vector<int> dot;
struct node {
int v,next;
}point[10001];
void ae (int u,int v,int now) {
point[now].v=v;
point[now].next=head[u];
head[u]=now;
}
void tarjon (int u,int fa) {
dfn[u]=low[u]=++index;
for (int a=head[u];a;a=point[a].next) {
int v=point[a].v;
if (v==fa) continue;
if (dfn[v]==0) {
tarjon(v,u);
low[u]=min(low[u],low[v]);
if (dfn[u]<=low[v]) d[u]++;
}
else low[u]=min(low[u],dfn[v]);
}
}
int main () {
cin >>n>>m;
for (int a=1;a<=m;a++) {
int u,v;
cin >>u>>v;
ae(u,v,2*a-1);
ae(v,u,2*a);
}
for (int a=1;a<=n;a++) if (!book[a]) tarjon(a,0);
for (int a=1;a<=n;a++) {
if (a==1 && d[a]>=2) dot.push_back(a);
else if (d[a]>0) dot.push_back(a);
}
// cout <<dot.size()<<endl;
for (int a=0;a<dot.size();a++) cout <<dot[a]<<endl;
return 0;
}