NOIP2015信息传递 强连通分量 tarjan

原创 2016年08月30日 19:47:16
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=200000;
int sum=0;
int begin[maxn],to[2*maxn],next[2*maxn],w[2*maxn],ans[maxn];
int Index,e,top,dfn[maxn],low[maxn],stack[maxn],p[maxn];
inline void tarjan(int x){
	int i;
	dfn[x]=low[x]=++Index;
	stack[++top]=x;
	p[x]=1;
	for(i=begin[x];i;i=next[i]){
		int j=to[i];
		if(!dfn[j]){
			tarjan(j);
			low[x]=min(low[x],low[j]);
		}
		else if(p[j]){
			low[x]=min(low[x],dfn[j]);
		}
	}
	if(dfn[x]==low[x]){
		sum++;
		while(1){
			int tmp=stack[top--];
			ans[sum]++;
			p[tmp]=0;
			if(tmp==x)break;
		}
	}
}
inline void add(int x,int y){
	to[++e]=y;
	next[e]=begin[x];
	begin[x]=e;
}
int main(){
	int i,j,k,m,n;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		add(i,x);
	}
	for(i=1;i<=n;i++)
		if(!dfn[i])
			tarjan(i);
	sort(ans+1,ans+sum+1);
	for(i=1;i<=sum;i++)
		if(ans[i]>1){
			printf("%d\n",ans[i]);return 0;}
	return 0;
}

版权声明:本文为hk原创文章,未经hk允许不得转载。

NOIP2015 信息传递 解题报告(强连通分量)

在线评测: http://codevs.cn/problem/4511/ 整体思路: 说白了就把这看成一张图,找一个大小不为1的最小的强连通分量即可 失误之处: 没啥失误...
  • qq_35772697
  • qq_35772697
  • 2016年08月27日 14:14
  • 929

【NOIP2015】洛谷P2661 信息传递(tarjan)

题目描述有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。游戏开始时,每人都只知道自己的生日。之后每一轮中...
  • Loi_Meiko
  • Loi_Meiko
  • 2016年11月07日 16:38
  • 378

强连通分量-tarjan算法模板详解

这里主要给出以为大牛的分析,但是大牛的模板代码没有注释,我也比较笨,还是看了很久,这里给出模板的详细注释...
  • ZYY173533832
  • ZYY173533832
  • 2013年10月10日 19:05
  • 2922

强连通分量之tarjan算法

强连通分量问题通常可归纳为要求出强连通分量,然后通过缩点(将得出的每个连通分量视为一个点,然后继续构图,例如连通分量A有一个点有一条边指向连通分量B的一个点,那么在A上搭一条边到B,其他连通分量也以此...
  • HuangLianzheng
  • HuangLianzheng
  • 2010年07月22日 16:18
  • 8061

UOJ146 【NOIP2015】信息传递(强连通分量,Tarjan算法)

描述 有 nn 个同学(编号为 11 到 nn )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 ii 的同学的信息传递对象是编号为 TiTi 的同学。 ...
  • riba2534
  • riba2534
  • 2018年01月18日 20:50
  • 48

对于Tarjan强连通分量算法的理解

对于Tarjan强连通分量算法的理解
  • Goseqh
  • Goseqh
  • 2017年02月22日 12:39
  • 968

Tarjan算法求强连通分量总结

Tarjan算法求强连通分量总结 首先明确强连通分量的概念:如果图中的任意两个点都能互相到达,则为强连通分量。极大强连通分量:不被其它任何强连通分量包含的强连通分量。 强连通分量主要与两种边有关:...
  • MrH929
  • MrH929
  • 2016年07月18日 19:12
  • 496

NOIP 2015 d1t2 信息传递

有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。  游戏开始时,每人都只知道自己的生日。之后每一轮中,所...
  • Travelling_alone
  • Travelling_alone
  • 2016年03月21日 19:40
  • 1864

POJ 1236(tarjan 强连通分量 缩点)

POJ1236题目大意问,对于一个DAG(又向无环图): 1.至少要选几个点,才能从这些点出发到达所有点 2.至少加入几条边,就能从图中任何一个点出发到达所有点分析先求DAG的强连通分量数,再缩点...
  • mmy1996
  • mmy1996
  • 2017年02月22日 22:11
  • 510

Tarjan算法【有向图的强连通分量】

[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(stronglyconnected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图...
  • fang_jian_ming
  • fang_jian_ming
  • 2014年08月23日 09:38
  • 1009
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NOIP2015信息传递 强连通分量 tarjan
举报原因:
原因补充:

(最多只允许输入30个字)