首页 > 其他分享 >割点和割边

割点和割边

时间:2023-08-16 15:13:18浏览次数:32  
标签:int text CutPoint 割点 dfs 割边 dfn low

\(x's \text{ } son \in T(x)\)

\(Isn't \text{ }x's \text{ }son \in T'(x)\)

\(x \in Cutpoint,y\in T(x) ,y\notin T'(x)\) 。

\(i's\text{ dfs order} \to dfn_i\)

$\min(dfn_{f_y,y\in T(x)}) \to low_x $

\(low_{y,y\in T(x)} \ge dfn_x \to CutPoint\)

\(low_{y,y\in T(x)} \gt dfn_x \to CutEdge\)

\(X=Root ,only \text{ } has \text{ } two \text{ } son\) 。

#include<bits/stdc++.h>

using namespace std;

#define int long long 
#define F(i,a,b) for(int i=a;i<=b;i++)

const int Maxn=2e5+5;

int R,Num_CutPoint,dfn[Maxn],cnt,low[Maxn],n,m;

bool CutPoint[Maxn];

vector<int> to[Maxn];

void dfs(int u){
	low[u]=dfn[u]=++cnt;
	int Son=0;
	for(auto &i:to[u]){
		if(!dfn[i]){
			Son++;dfs(i);low[u]=min(low[u],low[i]);
			if(low[i]>=dfn[u]&&u!=R) Num_CutPoint+=(!CutPoint[u]),CutPoint[u]=1; 
		}else low[u]=min(low[u],dfn[i]);
	}
	if(u==R&&Son>=2) Num_CutPoint+=(!CutPoint[u]),CutPoint[u]=1;
}

signed main(){
	cin>>n>>m;
	for(int i=1,u,v;i<=m;i++){
		cin>>u>>v;
		to[u].push_back(v);
		to[v].push_back(u);
	}
	F(i,1,n) if(!dfn[i]) R=i,dfs(i);
	cout<<Num_CutPoint<<endl;
	F(i,1,n) if(CutPoint[i]) cout<<i<<" " ;
 	return 0;
} 

标签:int,text,CutPoint,割点,dfs,割边,dfn,low
From: https://www.cnblogs.com/zhong114514/p/17635114.html

相关文章

  • 割点 & 点双
    0.前言最抽象的一集马上就和昨天的搞混1.几个区别啥是强连通分量?有向图的东西!现在开始就踏进无向图的大门!2.性质割点:在一个无向连通图中,如果删去某个点后,图变成不连通图,则称该点为割点。点双连通:如果一个连通图(可以是一个子图)中不含割点,则称该图是点双连通的。点双连......
  • [学习笔记] 割点 & 割边 & 双连通分量
    一、定义在无向连通图\(G=(V,E)\)中,若存在一个点\(u(u\inV)\)使得删掉点\(u\)及其相连的边,会使原图不连通,就称\(u\)是原图的一个割点(cutvertex);若存在一条边\((u,v)((u,v)\inE)\)满足删掉\((u,v)\)后会使原图不连通,就称\((u,v)\)是原图的一座桥(或......
  • BZOJ 2730: [HNOI2012]矿场搭建 tarjan割点
    2730:[HNOI2012]矿场搭建TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 2010  Solved: 935[Submit][Status][Discuss]Description煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口......
  • BOZJ 1123: [POI2008]BLO tarjan求割点
    1123:[POI2008]BLOTimeLimit: 10Sec  MemoryLimit: 162MBSubmit: 1140  Solved: 505[Submit][Status][Discuss]DescriptionByteotia城市有n个townsm条双向roads.每条road连接两个不同的towns,没有重复的road.所有towns连通。Input输入n<=100000m<=5......
  • P3388 【模板】割点(割顶) 题解
    一、题目描述:给你一个$n$个点,$m$条边的无向图。求出所有割点,按节点编号升序排序。数据范围:$1\len\le2\times10^4,1\lem\le1\times10^5$。 二、解题思路:板子题,不需要思路。时间复杂度$O(n+m)$。 三、完整代码:1#include<iostream>......
  • 【图论】割点与桥
    目录定义割点割边(桥)关系算法求割点伪代码模版定义割点如果删除无向图中的某个点会使无向图的连通分量数增多,则把这个点称为割点。割边(桥)如果删除无向图中的某条边会使无向图的连通分量数增多,则把这个点称为割边(桥)。关系桥的两端可以有割点。算法求割点割点:存在子树最高......
  • POJ2117 Electricity 题解 tarjan点双连通分量 割点
    题目链接:http://poj.org/problem?id=2117题目大意:给定一个由\(n\)个点\(m\)解题思路:tarjan,判断\(u\)的子节点有几个\(v\)满足\(low[v]\gedfn[u]\)就是答案,但是同时如果\(u\)不是这个dfs树的根节点,个数还要加\(1\)。示例程序1(C++11,POJ不支持):#include<bits/stdc++.h>......
  • POJ2117 Electricity 题解 tarjan点双连通分量 割点
    题目链接:http://poj.org/problem?id=2117题目大意:给定一个由\(n\)个点\(m\)条边构成的无向图,请你求出该图删除一个点之后,连通块最多有多少。解题思路:tarjan,判断\(u\)的子节点有几个\(v\)满足\(low[v]\gedfn[u]\)就是答案,但是同时如果\(u\)不是这个dfs树的根节......
  • 「学习笔记」双连通分量、割点与桥
    文章图片全部来自Oi-wiki,部分图片加以修改前面我们在学tarjan算法时,提到过强连通分量,即有向图上的环,那么无向图上是否也有强连通分量呢?很遗憾,没有但是,无向图有双连通分量!分为点双连通和边双连通(下面简称点双和边双)。边双连通分量概念在一张联通的无向图中,对于两个点\(x......
  • Codeforces Round #Pi (Div. 2) E. President and Roads (最短路+强连通求割边)
    题目地址:codeforces#pi(DIV2)E题目很水。。就是先求两边最短路,然后把可能为最短路的边挑出来,然后判断是否yes只需要转化成无向图跑一遍tarjan,找出割边,割边就是yes,然后剩下的边就让它的值为最短路-1就行了,如果-1后变成了非正数,就是no.但是!!!居然卡spfa!!那是不是说cf以后就不......