受欢迎的牛[HAOI2006]
——BZOJ1051
Description
每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这
 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。
Input
第一行两个数N,M。 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可能出现多个A,B)
Output
一个数,即有多少头牛被所有的牛认为是受欢迎的。
Sample Input
3 3
1 2
2 1
2 3
Sample Output
1
HINT
$ 100% $ 的数据 $ N<=10000 $ ,$ M<=50000 $
Analysis
 我们需要考虑哪些牛受欢迎,就是考虑哪些点能被所有点访问过。
 这道题我的思维过程是这样的:试想一下出度为0的点。如果整张图只有一个出度为0的点,那么它肯定是受欢迎的。(有两个就不是了,不能互相到达)
 那要是没有出度为0的点呢,那就是有环呗,环之间的点都能互相到达,那只要环外的点都能到达环,那环内的点都受欢迎。一个环就是强连通分量,那强连通分量里的点都能互相到达。那我们就想到了刚才说的结论,联想到把强联通分量想象成一个点,这个点可是出度为0的,若是只有一个这样的“点”的话,就有很多受欢迎的牛了。
 这就是强联通分量缩点的算法。强联通分量用tarjan来求,缩点重构图操作一下,答案就求出来了。
code
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 100005;
bool vis[maxn];
int runn[maxn];
vector <int> edge[maxn];
vector <int> fedge[maxn];
int m,n;
int ans;
int tot;
int dfn[maxn],st[maxn],low[maxn],ins[maxn],bel[maxn],top,cnt,scc,buc[maxn],visb[maxn];
void tarjan(int x)
{
	dfn[x] = low[x] = ++cnt;
	st[++top] = x;
	ins[x] = 1;
	for(int i=0;i<edge[x].size();i++)
	{
		if(!dfn[edge[x][i]])
		{
			tarjan(edge[x][i]);
			low[x] = min(low[x],low[edge[x][i]]);
		}
		else if(ins[edge[x][i]])
			low[x] = min(low[x],dfn[edge[x][i]]);
	}
	if(dfn[x] == low[x])
	{
		int t;
		ins[x] = 0;
		bel[x] = ++scc;
		while(st[top] != x)
		{
			t = st[top--];
			ins[t] = 0;
			bel[t] = scc;
		}
		top--;
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		edge[x].push_back(y);
	}
	for(int i=1;i<=n;i++)
		if(!dfn[i])
			tarjan(i);
	for(int i=1;i<=n;i++)
		buc[bel[i]]++;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<edge[i].size();j++)
		{
			if(bel[i] != bel[edge[i][j]])
				fedge[bel[i]].push_back(bel[edge[i][j]]);
		}
	}
	for(int i=1;i<=scc;i++)
		if(!fedge[i].size())
			ans += buc[i];
 	printf("%d",ans);
	return 0;
}
												
											受欢迎的牛[HAOI2006]的更多相关文章
- 受欢迎的牛 [HAOI2006] [强连通] [传递闭包(划)]
		
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛 A 认为牛 B受欢迎.这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A ...
 - bzoj1051 [HAOI2006]受欢迎的牛
		
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
 - 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
		
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
 - 1051: [HAOI2006]受欢迎的牛
		
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2276 Solved: 1190[Submit][Sta ...
 - BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
		
1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
 - 【BZOJ】1051: [HAOI2006]受欢迎的牛
		
[HAOI2006]受欢迎的牛 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢 ...
 - bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
		
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
 - BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
		
tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...
 - bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)
		
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6064 Solved: 3179[Submit][Sta ...
 
随机推荐
- 如何将maven的jar项目简单快速的转变成war项目
			
第一种方法: 首先在pom文件中的version标签下下方加入 <packaging>war</packaging>标签 然后右键项目 Java EE Tools 选择 Gen ...
 - 黄聪:xampp启动后mysql报Error
			
2013-08-04 13:48:22 760 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous t ...
 - 一些有用的Java学习资料
			
Better Java,一些好的Java实践 Google Java Style Guide 30个Java编程技巧 JDK8新增语法特性简介,对Java8中新增的函数接口.Lambda表达式.方法引 ...
 - os.rename 和os.replace
			
f1 = open("hello.txt","w") f1.write("hello,my name is bobo.") f1.close ...
 - win10下btcd的安装和简单配置
			
btcd btcd github地址 1. 安装 1) 安装go的包管理工具glide glide github地址 $ go get -u github.com/Masterminds/glide ...
 - python:推导式套路
			
推导式套路 列表推导式为例的推导式详细格式,同样适用于其他推导式 variable = [out_exp_res for out_exp in input_list if out_exp == 2] ...
 - ubuntu下的Nessus插件更新
			
00x1: 记录下nessus插件离线更新,免得每次度娘我Nessus是放在虚拟机里面. 00x2: nessus 插件更新地址: https://plugins.nessus.org/v2/offl ...
 - springMVC的高级数据绑定,以及json交互,全局异常配置,
			
一.窄化请求映射 1.在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理. 如下: @Con ...
 - python 处理 https链接 socket报错 链接https
			
// socket 链接 https 有问题 得去看看ssl文档 用法 import socketimport ssl def https_test(url): proto = "http& ...
 - [leetcode]2. Add Two Numbers.cpp
			
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...