首页 > 其他 > 详细

luogu3388 【模板】割点(割顶)

时间:2017-12-04 10:59:42      阅读:247      评论:0      收藏:0      [点我收藏+]

模板题

#include <iostream>
#include <cstdio>
using namespace std;
struct Edge{
    int too, nxt;
}edge[200005];
int n, m, dfn[100005], loo[100005], ind, uu, vv, cnt, hea[100005];
bool isa[100005];
void add_edge(int fro, int too){
    edge[++cnt].nxt = hea[fro];
    edge[cnt].too = too;
    hea[fro] = cnt;
}
void tarjan(int u, int f){
    dfn[u] = loo[u] = ++ind;
    int cd=0;
    for(int i=hea[u]; i; i=edge[i].nxt){
        int t=edge[i].too;
        if(!dfn[t]){
            cd++;
            tarjan(t, u);
            loo[u] = min(loo[u], loo[t]);
            if(f!=-233 && loo[t]>=dfn[u])   isa[u] = true;
        }
        loo[u] = min(loo[u], dfn[t]);
    }
    if(f<0 && cd>=2)    isa[u] = true;
}   
int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        scanf("%d %d", &uu, &vv);
        add_edge(uu, vv);
        add_edge(vv, uu);
    }
    for(int i=1; i<=n; i++)
        if(!dfn[i])
            tarjan(i, -233);
    int ans=0;
    for(int i=1; i<=n; i++)
        if(isa[i])
            ans++;
    cout<<ans<<endl;
    for(int i=1; i<=n; i++)
        if(isa[i])
            printf("%d ", i);
    return 0;
}

luogu3388 【模板】割点(割顶)

原文:http://www.cnblogs.com/poorpool/p/7976062.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!