• 洛谷 P3388 【模板】割点(割顶)


    题目背景

    割点

    题目描述

    给出一个n个点,m条边的无向图,求图的割点。

    输入输出格式

    输入格式:

     

    第一行输入n,m

    下面m行每行输入x,y表示x到y有一条边

     

    输出格式:

     

    第一行输出割点个数

    第二行按照节点编号从小到大输出节点,用空格隔开

     

    输入输出样例

    输入样例#1: 复制
    6 7
    1 2
    1 3
    1 4
    2 5
    3 5
    4 5
    5 6
    输出样例#1: 复制
    1 
    5

    说明

    n,m均为100000

    tarjan 图不一定联通!!!

     

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 100010
    using namespace std;
    int n,m,ans;
    int tot=1,tim;
    int cutdian[MAXN],cutbian[MAXN];
    int to[MAXN*2],net[MAXN*2],head[MAXN];
    int low[MAXN],dfn[MAXN],vis[MAXN];
    void add(int u,int v){
        to[++tot]=v;net[tot]=head[u];head[u]=tot;
        to[++tot]=u;net[tot]=head[v];head[v]=tot;
    }
    void tarjin(int now,int pre){
        low[now]=dfn[now]=++tim;
        vis[now]=1;
        int sum=0;
        bool boo=0;
        for(int i=head[now];i!=-1;i=net[i])
            if((i^1)!=pre)
                if(!vis[to[i]]){
                    sum++;
                    tarjin(to[i],i);
                    if(low[to[i]]>dfn[now])    cutbian[i/2]=1;
                    if(low[to[i]]>=dfn[now])    boo=1;
                    low[now]=min(low[now],low[to[i]]);
                }
                else    low[now]=min(low[now],dfn[to[i]]);
        if(pre==-1){
            if(sum>1)    cutdian[now]=1;
        }
        else if(boo==1)    cutdian[now]=1;
    }
    int main(){
        memset(head,-1,sizeof(head));
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            add(u,v);
        }
        for(int i=1;i<=n;i++)
            if(!vis[i])
                tarjin(i,-1);
        for(int i=1;i<=n;i++)
            if(cutdian[i])    ans++;
        cout<<ans<<endl;
        for(int i=1;i<=n;i++)
            if(cutdian[i])
                cout<<i<<" ";
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    pip安装flask问题解决
    GRE新东方推荐学习方法(2010年左右)
    使用eclipse IDE遇到的问题
    2014年互联网大会(商业价值,北京,7月)
    Indexing the World Wide Web: the Journey So Far阅读笔记
    Big Data Opportunities and Challenges(by周志华)论文要点
    spark常用算子总结
    使用Faster R-CNN做目标检测
    Oracle 性能调优 SQL_TRACE
    Oracle 性能调优 10053事件
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7794995.html
Copyright © 2020-2023  润新知