Popular Cows
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 29908   Accepted: 12131

Description

Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= 10,000) cows, you are given up to M (1 <= M <= 50,000) ordered pairs of the form (A, B) that tell you that cow A thinks that cow B is popular. Since popularity is transitive, if A thinks B is popular and B thinks C is popular, then A will also think that C is
popular, even if this is not explicitly specified by an ordered pair in the input. Your task is to compute the number of cows that are considered popular by every other cow.

Input

* Line 1: Two space-separated integers, N and M

* Lines 2..1+M: Two space-separated numbers A and B, meaning that A thinks B is popular.

Output

* Line 1: A single integer that is the number of cows who are considered popular by every other cow.

Sample Input


Sample Output


Hint

Cow 3 is the only cow of high popularity.

Source

题解

tarjan一直没学会,今天写了道入门题。主要思路是用tarjan()求出强连通分量,记录每一个强连通分量的出度,出度为0的就是大家都认可的popular cow。在数组问题上卡了很久,后来发现u[i],v[i]要开5*10100才ac。

15701878

  ksq2013 2186 Accepted 1304K 94MS C++ 1969B 2016-07-11 13:36:28
#include<cstdio>
#include<cstring>
#include<iostream>
#define M 10100
using namespace std;
int n,m,u[M*],v[M*],first[M*],mnext[M*],ans[M],outdu[M];
int dfs_clock,scc_cnt,stack_count,my_stack[M*],pre[M],sccno[M],lowlink[M];
void Init()
{
memset(first,-,sizeof(first));
memset(mnext,,sizeof(mnext));
memset(my_stack,,sizeof(my_stack));
memset(lowlink,,sizeof(lowlink));
memset(sccno,,sizeof(sccno));
memset(pre,,sizeof(pre));
memset(ans,,sizeof(ans));
memset(outdu,,sizeof(outdu));
}
void Link()
{
for(int i=;i<=m;i++){
scanf("%d%d",&u[i],&v[i]);
mnext[i]=first[u[i]];
first[u[i]]=i;
}
}
void dfs(int ux)
{
pre[ux]=lowlink[ux]=++dfs_clock;
my_stack[++stack_count]=ux;
int vx;
for(int i=first[ux];i!=-;i=mnext[i]){
vx=v[i];
if(!pre[vx]){
dfs(vx);
lowlink[ux]=min(lowlink[ux],lowlink[vx]);
}
else if(!sccno[vx])
lowlink[ux]=min(lowlink[ux],pre[vx]);
}
if(lowlink[ux]==pre[ux]){
scc_cnt++;
int tmp=;
do{
tmp++;
vx=my_stack[stack_count--];
sccno[vx]=scc_cnt;
}while(vx!=ux);
ans[scc_cnt]=tmp;
}
}
void Tarjan()
{
dfs_clock=scc_cnt=stack_count=;
for(int i=;i<=n;i++)
if(!pre[i])dfs(i);
}
int main()
{
while(~scanf("%d%d",&n,&m)){
Init();
Link();
Tarjan();
if(scc_cnt==){
printf("%d\n",n);
continue;
}
for(int i=;i<=n;i++){
for(int j=first[i];j!=-;j=mnext[j]){
int vx=v[j];
if(sccno[i]!=sccno[vx])
outdu[sccno[i]]++;
}
}
int res=;
for(int i=;i<=scc_cnt;i++)
if(!outdu[i]){
if(!res)res=ans[i];
else {res=;break;}
}
printf("%d\n",res);
}
return ;
}

poj 2186 Popular Cows的更多相关文章

  1. 强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)

    poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且能够传递, 即1欢迎2不代表2欢迎1, 可是假设2也欢迎3那么1也欢迎3. 求 ...

  2. poj 2186 Popular Cows (强连通分量+缩点)

    http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissi ...

  3. POJ 2186 Popular Cows (强联通)

    id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 655 ...

  4. poj 2186 Popular Cows 【强连通分量Tarjan算法 + 树问题】

    题目地址:http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  5. tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows

    缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...

  6. POJ 2186 Popular Cows(Targin缩点)

    传送门 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31808   Accepted: 1292 ...

  7. [强连通分量] POJ 2186 Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31815   Accepted: 12927 De ...

  8. POJ 2186 Popular Cows(强连通)

                                                                  Popular Cows Time Limit: 2000MS   Memo ...

  9. poj 2186 Popular Cows【tarjan求scc个数&&缩点】【求一个图中可以到达其余所有任意点的点的个数】

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27698   Accepted: 11148 De ...

随机推荐

  1. [Android]使用Gradle提交自己开源Android库到Maven中心库

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4388175.html 此文针对开源爱好者. 如果你想让别人使用 ...

  2. git使用详细介绍

    1. Git概念 1.1. Git库中由三部分组成        Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而 ...

  3. Java你可能不知道的事(3)HashMap

    概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...

  4. js 变量与值 连写

    window.location.href="index.php?app=memberpmrecord&act=get_download&bname="+busine ...

  5. 通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件

    现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc ...

  6. yii2超好用的日期组件和时间组件

    作者:白狼 出处:http://www.manks.top/yii2_datetimepicker.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ...

  7. 什么是Java实例初始化块

    在本篇文章,我将会使用一个例子展示什么是实例变量初始化块,实例初始化块和静态初始化块,然后说明在Java中实例初始化块是如何工作的. 执行顺序 查看下面的代码,你知道哪个先执行吗? package s ...

  8. ORA-07445&ORA-00108错误案例

    由于需要ORACLE的UAT测试环境,克隆了虚拟机后,修改IP地址后,启动实例遇到了ORA-07445 &ORA-00108错误. 案例环境:   SQL> select * from ...

  9. 服务器磁盘扩展卷时遭遇“There is not enough space available on the disk(s) to complete this operation.”错误

    在ESX VM的一台服务器由于磁盘空间告警,打算决定给E盘扩展空间,增加20G的空间,在操作过程遭遇了Expanding Disk Volume gives error "There is ...

  10. MySQL online ddl原理

    背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的 ...