zoukankan      html  css  js  c++  java
  • 洛谷 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<<" ";
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    vue源码分析—Vue.js 源码目录设计
    vue源码分析—认识 Flow
    在Windows上安装配置MongoDB
    mongoDB概述
    Could not load file or assembly Microsoft.Web.Infrastructure
    配置错误 不能在此路径中使用此配置节(转)
    VS2013快捷键大全
    Create new tool for CSV
    How to get http response.
    C#中Split用法
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7794995.html
Copyright © 2011-2022 走看看