社区讨论

自学tarhan,wa on#11求条

P3388【模板】割点(割顶)参与者 7已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mjbeluux
此快照首次捕获于
2025/12/18 20:15
2 个月前
此快照最后确认于
2025/12/19 14:28
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,dfn[29000],low[29000],num,ans[29005],cnt;
vector<int> s[29000];
void dfs(int x,bool fir){
    low[x]=dfn[x]=++num;
    int son=0;
    for(int i=0;i<s[x].size();i++){
        int to=s[x][i];
        if(!dfn[to]) {
            dfs(to,0);
            low[x]=min(low[x],low[to]);
            if(low[to]>=dfn[x]&&!fir) ans[x]=1;
            if(fir) son++;
        }
        else {
            low[x]=min(low[x],dfn[to]);
        }
    }
    if(son>1&&fir) ans[++cnt]=x;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        s[x].push_back(y);
        s[y].push_back(x);
    }
    for(int i=1;i<=n;i++){
        if(!dfn[i]) dfs(i,1);
    }
    for(int i=1;i<=n;i++){
        if(ans[i]) cnt++;
    }
    cout<<cnt<<endl;
    for(int i=1;i<=n;i++){
        if(ans[i]) cout<<i<<' ';
    }
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...