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 ...
随机推荐
- on a null object reference 问题的解决办法
FATAL EXCEPTION: …… java.lang.RuntimeException: Unable to start activity ComponentInfo…… ava.lang.Nu ...
- java webRoot 路径问题
项目部署后的目录结构 src 生成到 WEB-INF\classes文件下; WebRoot 为项目的根目录,应用中“/action”就相当于是系统目录中的”WebRoot/action" ...
- python之list操作
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 列表(list)是最常用的Python数据类型,它可以作为一个方 ...
- Educational Codeforces Round 20 B
Description You are given the array of integer numbers a0, a1, ..., an - 1. For each element find th ...
- android 7.0 应用间文件共享FileProvider
1.官方教程 Android 7.0 以后安全系数提高,应用间文件共享要使用FileProvider.原来的 file:/// Uri 替换为 content://Uri https://devel ...
- 快速分页:jsp标签pager-taglib
一:简介 Pager-taglib,支持多种风格的分页显示.实际上它是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组 合,会形成多种不一样的分页页面,风格各异.它既 ...
- popoverController使用注意--转
一.设置尺寸 提示:不建议,像下面这样吧popover的宽度和高度写死. 1 //1.新建一个内容控制器 2 YYMenuViewController *menuVc=[[YYMenuViewCont ...
- 167 Two Sum II - Input array is sorted 两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数.函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2.请注意,返回的下标值(i ...
- RabbitMQ十:重要方法简述(参数)
主要方法 前言 经过前面的学习,RabbitMQ 已经拙见有一定认识和了解,今天主要针对我们在前面学习方法进行一次小总结,本篇文章也想在开头写的,但是后来考虑,如果我都把方法都一一列举,我想大家都没很 ...
- Java基础50题test3—水仙花数
水仙花数 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例 如:153 是一个"水仙花数", ...