POJ2186:Popular Cows(tarjan+缩点)
题目解析:
这题题意没什么好说的,解法也挺简单的,只要会tarjan算法+只有一个出度为0的强连通分量题目有解这题就迎刃而解了。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#define N 100002
using namespace std;
int n,m,tt,time,cnt,e,a[N],b[N],sum[N];
struct node
{
int x,y;
int next;
} eg[];
int head[N],low[N],dfn[N],f[N],instack[N],belong[N],s[N];
void init()
{
memset(head,-,sizeof(head));
memset(instack,,sizeof(instack));
memset(belong,,sizeof(belong));
memset(sum,,sizeof(sum));
memset(f,,sizeof(f));
tt=;
cnt=;
}
void add(int xx,int yy)
{
eg[tt].x=xx;
eg[tt].y=yy;
eg[tt].next=head[xx];
head[xx]=tt++;
}
void tarjan(int i)
{
int w;
dfn[i]=low[i]=++time;
instack[i]=;
s[++e]=i;
for(int j=head[i]; j!=-; j=eg[j].next)
{
w=eg[j].y;
if(!dfn[w])
{
tarjan(w);
low[i]=min(low[i],low[w]);
}
else if(instack[w]==)
{
low[i]=min(low[i],dfn[w]);
}
}
if(dfn[i]==low[i])
{
cnt++;
do
{
w=s[e--];
instack[w]=;
belong[w]=cnt;
}
while(w!=i);
}
}
void solve()
{
time=e=;
memset(dfn,,sizeof(dfn));
for(int i=; i<=n; i++)
{
if(!dfn[i])
{
tarjan(i);
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
for(int i=; i<=m; i++)
{
scanf("%d%d",&a[i],&b[i]);
add(a[i],b[i]);
}
solve();
for(int i=; i<=m; i++)
{
if(belong[a[i]]!=belong[b[i]])
{
f[belong[a[i]]]=;
}
}
for(int i=; i<=n; i++)
{
sum[belong[i]]++;
}
int V=,count;
for(int i=; i<=cnt; i++)
{
if(!f[i])
{
V++;
count=sum[i];
}
}
if(V==) printf("%d\n",count);
else printf("0\n");
}
return ;
}
POJ2186:Popular Cows(tarjan+缩点)的更多相关文章
- POJ 2168 Popular cows [Tarjan 缩点]
...
- [poj2186]Popular Cows(targin缩点)
题意:求其他所有牛都认为其牛的牛的个数. 解题关键:targin算法模板题,缩点形成一棵树,并不一定是棵树,可能含有多个入度为0的点,寻找出度为0的点(缩点之后的点)的个数,如果个数大于0,则无解,否 ...
- USACO 2003 Fall Orange Popular Cows /// tarjan缩点 oj22833
题目大意: n头牛,m个崇拜关系,并且崇拜具有传递性 如果a崇拜b,b崇拜c,则a崇拜c 求最后有几头牛被所有牛崇拜 强连通分量内任意两点都能互达 所以只要强联通分量内有一点是 那么其它点也都会是 按 ...
- POJ 2186 Popular Cows tarjan缩点算法
题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...
- 强连通分量tarjan缩点——POJ2186 Popular Cows
这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...
- 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows
P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所 ...
- 【Tarjan缩点】POJ2186 Popular Cows
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 35644 Accepted: 14532 De ...
- POJ-2186 Popular Cows,tarjan缩点找出度为0的点。
Popular Cows 题意:一只牛崇拜另外一只牛,这种崇拜关系可以传导.A->B,B->C =>A->C.现在给出所有的关系问你有多少牛被其他所有的牛都崇拜. 思路:就是一 ...
- POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 23445 Accepted: 9605 Des ...
- POJ2186 Popular Cows [强连通分量|缩点]
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31241 Accepted: 12691 De ...
随机推荐
- HTML5 直播技术
https://segmentfault.com/a/1190000010440054
- Ini操作类
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- impala不能查询hive中新增加的表问题
使用Cloudera Manager部署安装的CDH和Impala,Hive中新增加的表,impala中查询不到,其原因是/etc/impala/conf下面没有hadoop和hive相关的 ...
- SpringBoot(零)-- 工程创建
一.约定优于配置 二.快速创建SoringBoot项目 地址:http://start.spring.io/ 三.在步骤二中,创建好了SpringBootDemo 项目,导入Eclipse 自定义ba ...
- 查看磁盘读写:iostat
iostat命令用来查看磁盘IO的读写情况,用法如下: [root@localhost ~]$ yum install -y sysstat # 安装iostat命令 [root@localhost ...
- Unity版本与虚拟现实头盔Deepoon大朋版本测试
一.看这里 Unity官方与OC runtime版本兼容性说明: https://developer.oculus.com/documentation/game-engines/latest/conc ...
- Linux 文件基本属性(转)
Linux 文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规 ...
- 使用reduce的方法实现对象数组去重
在开发中和面试当中,数组去重问题往往是受宠儿,那用最短的代码解决这个问题会使效率得到更大的提升.普通的数组,我们可以通过filter过滤方法进行去重,详情见本人博客:http://www.cnblog ...
- 为什么使用eval()将json字符串转换为对象要多加一个小括号
使用eval()将json字符串转换为对象要多加一个小括号: 关于eval()函数的具体用法这里就不多介绍了,具体可以参阅javascript的eval()方法一章节,下面就介绍一下为什么使用eval ...
- iOS实现传递不定长的多个参数
我们在使用苹果官方的文档的时候会发现可传不定数的参数例如: // [[UIAlertView alloc]initWithTitle:<#(nullable NSString *)#> m ...