#1184 : 连通性二·边的双连通分量

贴板子。求割边。将>改为>=即可判断u是否为割点。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=20008;
const int maxm=100008;
struct fuck{
	int u,v,next;
	bool ban;
}edge[maxm<<1];
int tol;
int head[maxn];
void init()
{
	tol=0;
	memset(head,-1,sizeof(head));
}
void addedge(int u,int v)
{
	edge[tol].u=u;
	edge[tol].v=v;
	edge[tol].next=head[u];
	edge[tol].ban=false;
	head[u]=tol++;
}
int tim=0;
int pre[maxn],low[maxn];
int tarj(int u,int fa)
{
	int lowu=pre[u]=++tim;
	int child=0;
	int i,v,lowv;
	for(i=head[u];i!=-1;i=edge[i].next)
	{
		v=edge[i].v;
		if(!pre[v])
		{
			child++;
			lowv=tarj(v,u);
			lowu=min(lowu,lowv);
			if(lowv>pre[u])
			{
				edge[i].ban=true;
				edge[i^1].ban=true;
			}
		}
		else	if(pre[v]<pre[u]&&v!=fa)
			lowu=min(lowu,pre[v]);
	}
	low[u]=lowu;
	return lowu;
}
int uni[maxn];
bool vis[maxn];
void dfs(int u,int idx)
{
	int i,v;
	vis[u]=true;
	uni[u]=idx;
	for(i=head[u];i!=-1;i=edge[i].next)
	{
		if(edge[i].ban||vis[edge[i].v])	continue;
		v=edge[i].v;
		dfs(v,idx);
	}
}
int main()
{
	int i,j,n,m,u,v;
	while(scanf("%d%d",&n,&m)==2)
	{
		init();
		for(i=1;i<=m;i++)
		{
			scanf("%d%d",&u,&v);
			addedge(u,v);
			addedge(v,u);
		}
		tim=0;
		memset(pre,0,sizeof(pre));
		tarj(1,-1);
		memset(vis,false,sizeof(vis));
		int ans=0;
		for(i=1;i<=n;i++)
			if(!vis[i])
			{
				dfs(i,i);
				ans++;
			}
		printf("%d\n",ans);
		for(i=1;i<=n;i++)
		{
			if(i!=1)	printf(" ");
			printf("%d",uni[i]);
		}
		printf("\n");
	}
	return 0;
}
时间: 2024-12-30 03:44:10

#1184 : 连通性二·边的双连通分量的相关文章

hihoCoder #1184 : 连通性二&#183;边的双连通分量(边的双连通分量模板)

#1184 : 连通性二·边的双连通分量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在基本的网络搭建完成后,学校为了方便管理还需要对所有的服务器进行编组,网络所的老师找到了小Hi和小Ho,希望他俩帮忙. 老师告诉小Hi和小Ho:根据现在网络的情况,我们要将服务器进行分组,对于同一个组的服务器,应当满足:当组内任意一个连接断开之后,不会影响组内服务器的连通性.在满足以上条件下,每个组内的服务器数量越多越好. 比如下面这个例子,一共有6个服务器和7条连接: 其中包

hihoCoder_#1184_连通性二&#183;边的双连通分量

#1184 : 连通性二·边的双连通分量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在基本的网络搭建完成后,学校为了方便管理还需要对所有的服务器进行编组,网络所的老师找到了小Hi和小Ho,希望他俩帮忙. 老师告诉小Hi和小Ho:根据现在网络的情况,我们要将服务器进行分组,对于同一个组的服务器,应当满足:当组内任意一个连接断开之后,不会影响组内服务器的连通性.在满足以上条件下,每个组内的服务器数量越多越好. 比如下面这个例子,一共有6个服务器和7条连接: 其中包

[HIHO1184]连通性二&#183;边的双连通分量(双连通分量)

题目链接:http://hihocoder.com/problemset/problem/1184 题意裸,写个博客记下输出姿势. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */ 17 #include <

hihoCoder_#1190_连通性&#183;四&#183;点的双连通分量(块)

#1190 : 连通性·四 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho从约翰家回到学校时,网络所的老师又找到了小Hi和小Ho. 老师告诉小Hi和小Ho:之前的分组出了点问题,当服务器(上次是连接)发生宕机的时候,在同一组的服务器有可能连接不上,所以他们希望重新进行一次分组.这一次老师希望对连接进行分组,并把一个组内的所有连接关联的服务器也视为这个组内的服务器(注意一个服务器可能属于多个组). 这一次的条件是对于同一个组满足:当组内任意一个服务器宕

双连通分量(点-双连通分量&amp;边-双连通分量)

概念: 双连通分量有点双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图. 一个无向图中的每一个极大点(边)双连通子图称作此无向图的点(边)双连通分量.求双连通分量可用Tarjan算法.--百度百科 Tip:先学一下tarjan算法以及求割点割边的算法之后,再看会比较好理解一些. 点双连通和边双连通 连通的概念:在无向图中,所有点能互相到达 连通分量:互相联通的子图 点双连通:删掉一个点之后,图仍联通 边双连

双连通分量和强连通分量的总结

[双连通分量] 一.边双连通分量定义 在分量内的任意两个点总可以找到两条边不相同的路径互相到达.总而言之就是一个圈,正着走反着走都可以相互到达,至少只有一个点. 二.点双连通分量的定义 参照上面,唯一的不同:任意两个点可以找到一个点不同的路径互相到达.也是一个圈,正反走都可以,至少为一个点. 三.边.点双连通分量模板代码要注意的地方 边双连通分量: 1.每个节点的所有儿子遍历后才开始计算分量大小,请与点双连通相区分: 2.割顶只能属于一个分量,请与割边区分:(容易搞混) 3.要注意j是否是i的父

hihoCoder #1190 : 连通性&#183;四(点的双连通分量模板)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho从约翰家回到学校时,网络所的老师又找到了小Hi和小Ho. 老师告诉小Hi和小Ho:之前的分组出了点问题,当服务器(上次是连接)发生宕机的时候,在同一组的服务器有可能连接不上,所以他们希望重新进行一次分组.这一次老师希望对连接进行分组,并把一个组内的所有连接关联的服务器也视为这个组内的服务器(注意一个服务器可能属于多个组). 这一次的条件是对于同一个组满足:当组内任意一个服务器宕机之后,不会影响组内其他服务

Hiho1186/ 第五十五周 连通性&#183;四 点双连通分量

题意: 给出一幅n个点m条边的连通图 求图中有几个点双连通分量 并输出每条边所在点双连通分量中所有边的编号最小边的编号 代码: #include<iostream> #include<cstdio> #include<cstring> #define maxn 20050 #define maxm 200050 using namespace std; struct node{ int id,to,next; }edge[maxm]; int head[maxn]; i

连通分量模板:tarjan: 求割点 &amp;&amp; 桥 &amp;&amp; 缩点 &amp;&amp; 强连通分量 &amp;&amp; 双连通分量 &amp;&amp; LCA(最近公共祖先)

PS:摘自一不知名的来自大神. 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合. 3.点连通度:最小割点集合中的顶点数. 4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图. 5.割边集合:如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合. 6.边连通度:一个图的边连通度的定义为,最