首页 > 其他分享 >P3388 【模板】割点(割顶)

P3388 【模板】割点(割顶)

时间:2024-02-24 23:00:48浏览次数:25  
标签:割顶 int 割点 next low ans now 节点 P3388

原题链接

题解

先说结论
对单个图做深度搜索树,对于树的根节点,它要能是割点当且仅当她有至少两个不互通的儿子节点
对于树的非叶子非根节点,它要能是割点当且仅当存在儿子节点能去的时间戳最小的节点不小于当前节点的深度搜索序
对于叶子节点, 不可能成为割点

code

#include<bits/stdc++.h>
using namespace std;
int vis[20005]={0};
int low[20005]={0};
int len=0;
int cnt=0;
vector<int> G[20004];
int ans[20005]={0};
void ss(int now,int leader)
{
    vis[now]=++len;
    low[now]=len;
    int son=0;
    for(auto next:G[now])
    {
        if(vis[next])
        {
            low[now]=min(low[now],vis[next]);
        }
        else
        {
            son++;
            ss(next,leader);
            if(low[next]>=vis[now]&&now!=leader)
            {
                cnt+=(!ans[now]);
                ans[now]=1;
            }
            low[now]=min(low[next],low[now]);
        }
    }

    if(son>=2&&now==leader)
    {
        cnt+=(!ans[now]);
        ans[now]=1;
    }
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }

    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            ss(i,i);
        }
    }

    cout<<cnt<<endl;
    for(int i=1;i<=n;i++)
    {
        if(ans[i])cout<<i<<" ";
    }
    return 0;
}

标签:割顶,int,割点,next,low,ans,now,节点,P3388
From: https://www.cnblogs.com/pure4knowledge/p/18031781

相关文章

  • 学习笔记——割点与桥
    一、割点、桥基本概念给定无向图\(G=(V,E)\)。对于一个点\(u\inG\),删除一个节点\(u\)与该节点所有相连的边后,该图不连通,则称点\(u\)为割点。对于一条边\(\{U,W\}\inG\),删除一条边\(\{U,W\}\)后,该图不连通,则称边\(\{U,W\}\)为桥。二、暴力算法对于割点,枚举每个......
  • tarjan无向图割点板子
    //无向图割点模板#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'#defineN20001usingnamespacestd;template<typenameTp>inlinevoidread(Tp&x){x=0;registerboolf=1;registercharc=getchar();for(;c&......
  • 【POJ 1144】Network 题解(Tarjan算法求无向图的割点)
    一家电话线公司(TLC)正在建立一个新的电话电缆网络。它们连接由1到N的整数编号的几个位置。没有两个地方的数字相同。这些线路是双向的,总是连接在两个地方,在每一个地方,线路都以电话交换机结束。每个地方都有一个电话交换机。从每个地方可以通过其他地方的线路到达,但不需要直接连接,可......
  • TARJAN复习 求强连通分量、割点、桥
    TARJAN复习求强连通分量、割点、桥目录TARJAN复习求强连通分量、割点、桥强连通分量缩点桥割点感觉之前写的不好,再水一篇博客强连通分量“有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(......
  • 割边+割点 学习心得
    先背诵tarjan板子#include<bits/stdc++.h>using namespace std;#define N 10005#define M 100005int tot,first[N],nxt[M],to[M];void add(int x,int y){    nxt[++tot]=first[x];    first[x]=tot;    to[tot]=y;}int n......
  • Tarjan 求割点和桥
    欢迎批评指正!前置芝士割点:对于一个点\(u\),若删除\(u\)会使当前无向图中连通分量增多,我们就称\(u\)为该图的割点。桥(割边):同理,对于一条边\((u,v)\),若删除\((u,v)\)会使当前无向图中连通分量增多,我们就称\((u,v)\)为该图的桥。Tarjan求强连通分量Tarjan求割点设......
  • 缩点+割点学习笔记
    缩点传送门根据题意:允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。所以我们可以考虑将可以相互到达的若干个点缩成一个点,以方便计算。下面讲如何实现:考虑\(dfs\),并且对点记录如下信息\(dfn\)(该点被遍历到的时间节点,即该点是第几个被遍历到的),\(low\)(可以追溯到......
  • 割点和割边
    \(x's\text{}son\inT(x)\)\(Isn't\text{}x's\text{}son\inT'(x)\)\(x\inCutpoint,y\inT(x),y\notinT'(x)\)。\(i's\text{dfsorder}\todfn_i\)$\min(dfn_{f_y,y\inT(x)})\tolow_x$\(low_{y......
  • 割点 & 点双
    0.前言最抽象的一集马上就和昨天的搞混1.几个区别啥是强连通分量?有向图的东西!现在开始就踏进无向图的大门!2.性质割点:在一个无向连通图中,如果删去某个点后,图变成不连通图,则称该点为割点。点双连通:如果一个连通图(可以是一个子图)中不含割点,则称该图是点双连通的。点双连......
  • [学习笔记] 割点 & 割边 & 双连通分量
    一、定义在无向连通图\(G=(V,E)\)中,若存在一个点\(u(u\inV)\)使得删掉点\(u\)及其相连的边,会使原图不连通,就称\(u\)是原图的一个割点(cutvertex);若存在一条边\((u,v)((u,v)\inE)\)满足删掉\((u,v)\)后会使原图不连通,就称\((u,v)\)是原图的一座桥(或......