bzoj 1051 受欢迎的牛-tarjan
https://www.lydsy.com/JudgeOnline/problem.php?id=1051
如果A喜欢B,那么A->B连边,那么整个图储存下来,如果有好多个牛是受欢迎的,那么他们一定会在一个环中,所以我们先跑一边 tarjan缩点,那么受欢迎的牛群所在的这个点(缩完),其出度为0。
证:若其出度不为0,则表明对外有连边,因为牛群是受欢迎的则外来点对其也应该有连边,那么他们这就会在一个环中。
所以缩完点后,统计一下每个强联通分量中有多少个点,记录每个点有多少出度,若会存在有两个及以上出度为0的点,那么表明图不连通,则输出0就好了。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define maxn int(1e2+2)
#define N int(1e4+2)
#define M int(5e4+2)
using namespace std;
int n,m,ans[N],sum[N];
struct ahah{
int nxt,to;
}edge[M];
int head[N],tot;
void add(int x,int y)
{
edge[++tot].nxt=head[x],edge[tot].to=y,head[x]=tot;
}
bool in[N];
int dfn[N],low[N],indx;
int stack[N],top;
int belong[N],cnt;
void tarjan(int s)
{
dfn[s]=low[s]=++indx;
in[s]=,stack[++top]=s;
for(int i=head[s];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(!dfn[v])
{
tarjan(v);
low[s]=min(low[v],low[s]);
}
else if(in[v]&&low[s]>dfn[v])low[s]=dfn[v];
}
if(dfn[s]==low[s])
{
int p;
belong[s]=++cnt;
do
{
p=stack[top--];
in[p]=;
belong[p]=cnt;
}while(p!=s);
}
}
int main()
{
int x,y;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d%d",&x,&y),add(x,y);
for(int i=;i<=n;i++)
if(!dfn[i])tarjan(i);
for(int i=;i<=n;i++)
{
ans[belong[i]]++;
for(int j=head[i];j;j=edge[j].nxt)
if(belong[i]!=belong[edge[j].to])sum[belong[i]]++;
}
int p=;
for(int i=;i<=cnt;i++)
{
if(!sum[i])
{
if(p)
{
printf("");
return ;
}
p=i;
}
}
printf("%d",ans[p]);
}
bzoj 1051 受欢迎的牛-tarjan的更多相关文章
- BZOJ 1051 受欢迎的牛(Tarjan缩点)
		1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4573 Solved: 2428 [Submit][S ... 
- 【tarjan】BZOJ 1051:受欢迎的牛
		1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 1642[Submit][Sta ... 
- BZOJ 1051 受欢迎的牛
		Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ... 
- BZOJ 1051 受欢迎的牛 缩点
		题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1051 题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数( ... 
- 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, 否则无解 ----------------------------------------------------------- ... 
- bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)
		链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ... 
- 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点
		Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ... 
- [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量
		1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5687 Solved: 3016[Submit][Sta ... 
随机推荐
- pl/sql developer中如何导出oracle数据库结构? 参考文章一
			本文作者来自csdn的xieyuooo地址为 : http://bbs.csdn.net/topics/340209135 进入PL/SQL后,使用如下图所示的操作步骤: 然后会弹出一个窗口,在弹出窗 ... 
- hdu1085 Holding Bin-Laden Captive!【生成函数】
			列出生成函数的多项式之后暴力乘即可 #include<iostream> #include<cstdio> #include<cstring> using name ... 
- Spring boot整合redis实现shiro的分布式session共享
			我们知道,shiro是通过SessionManager来管理Session的,而对于Session的操作则是通过SessionDao来实现的,默认的情况下,shiro实现了两种SessionDao,分 ... 
- git 项目切换分支 命令
			在项目开发总,一般都会用到git管理工具,有的公司可能还是用的svn:不管怎么样.用的顺手就行: 来说下git 的基本使用 git clone + 项目地址链接: 可以把项目克隆到本地: 然后一般顺序 ... 
- robotframework自动化系列:操作mysql数据库
			随着项目自动化深入和不断完善,大部分功能都已经能完成了自动化的操作:但是在设备添加的时候,遇到了难题.添加设备的时候mac必须是服务器设备管理中已经存在的mac地址,且是没有关联或绑定用户的设备信息. ... 
- UVA1328 Period【KMP/周期串/循环节】By cellur925
			鲜有的在luogu发题解以及使用LaTex??? 就丢链接跑了. 
- __slots__ 和 @property
			动态非常灵活, 创建一个class后, 给实例绑定一个属性: >>> class Bird: ... pass ... >>> s = Bird() >> ... 
- SQL 列拼接使用
			一个产品收藏表 Collection , 把该产品被收藏的人拼接在一列中如下: SQL SERVER SELECT ProjectID, UserIDs = ','+(STUFF((SELECT ', ... 
- Vue nextTick 理解
			官网解释: 将回调延迟到下次 DOM 更新循环之后执行.在修改数据之后立即使用它,然后等待 DOM 更新.它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例 ... 
- asp.net 微信登录实现方式
			之前我以为做微信登录跟微信公众号有关,后来发现是我想多了.原来微信还有一个叫开放平台的东西,见下图: 我的这个已经生成好了,没有的需要创建一个,https://open.weixin.qq.com/c ... 
