五彩斑斓24pts求助
查看原帖
五彩斑斓24pts求助
999274
CNS_5t0_0r2楼主2023/8/9 11:50
#include<bits/stdc++.h>
using namespace std;
const int N = 2 * 1e4 + 9,M = 2 * 1e5 + 9;
struct egde{
    int to,nex;
} e[M];
int ecnt,head[N];
void addegde(int u,int v){
    ecnt++;
    e[ecnt] = (egde){v,head[u]};
    head[u] = ecnt;
}
int n,m,x,y,ans;
int id,num[N],low[N];
bool flag[N];
void dfs(int root,int cur,int father){
    int child = 0;
    id++;
    num[cur] = id;
    low[cur] = id;
    for(int i = head[cur];i;i = e[i].nex){
        int v = e[i].to;
        if(!num[v]){
            child++;
            dfs(root,v,cur);
            low[cur] = min(low[cur],low[v]);
            if(cur != root && low[i] >= num[cur])
                flag[cur] = true;
            if(cur == root && child == 2)
                flag[cur] = true;
        }
        else if(v != father)
            low[cur] = min(low[cur],num[v]);
    }
    return;
}
int main(){
    scanf("%d%d", &n, &m);
    for(int i = 1;i <= m;i++){
        scanf("%d%d", &x, &y);
        addegde(x,y);
        addegde(y,x);
    }
    id = 0;
    dfs(1,1,1);
    for(int i = 1;i <= n;i++)
        if(flag[i])
            ans++;
    printf("%d\n",ans);
    for(int i = 1;i <= n;i++)
        if(flag[i])
            printf("%d ",i);
    return 0;
}
2023/8/9 11:50
加载中...