WA求助
查看原帖
WA求助
523808
Fe1ix_HeXinYu楼主2023/10/5 16:59
#include<bits/stdc++.h>
using namespace std;

const int N=2e4+100;
vector<int> G[N];
vector<int> ans;
int n,m;
int dfn[N],low[N],cnt=12;
int rt;

void tarjan(int u,int fa) {
    low[u]=dfn[u]=++cnt;
    bool isAns=0;
    int sons=0;
    for(int v:G[u]) {
        if(v==fa) continue;
        if(dfn[v]==0) { // v是u的儿子
            sons++;
            tarjan(v,u);
            if(low[v]>=dfn[u]) isAns=1;
            low[u]=min(low[u],low[v]);
        }else low[u]=min(low[u],dfn[v]);
    }
    if((isAns&&u!=rt)||sons>=2) ans.push_back(u);
}
int main() {
    cin>>n>>m;
    for(int i=1;i<=m;++i) {
        int u,v;
        cin>>u>>v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    for(int i=1;i<=n;i++)
        if(dfn[i]==0) {
            rt=i;
            tarjan(i,0);
        }

    cout<<ans.size()<<endl;
    sort(ans.begin(),ans.end());
    for(int i:ans)cout<<i<<' ';cout<<endl;

    return 0;
}
2023/10/5 16:59
加载中...