POJ 2186 Popular Cows(Tarjan)
http://poj.org/problem?id=2186
题意 :给你n头牛,m对关系,每对关系由两个编号组成,u和v代表着u认为v是受欢迎的,如果1认为2是受欢迎的,2认为3是受欢迎的,那1认为3也是受欢迎的。
思路 :强联通分量的Tarjan做法,将这些牛之间的关系看成一个有向图,最受欢迎的那个牛的那个点一定是出度为0的点。Tarjan的基本资料:http://hi.baidu.com/lydrainbowcat/item/1c664b662b1a1692c4d2491c
#include <stdio.h>
#include <stack>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream> using namespace std; const int maxn = ;
const int maxm = ;
stack<int >Q ;
int head[maxn],ID[maxn],low[maxn],dfn[maxn],in[maxn],out[maxn] ;
int cnt,cntt,n,m ,ans; struct node
{
int v,next,id ;
}Edge[maxm] ; void addedge(int u,int v,int w)
{
Edge[w].v = v ;
Edge[w].next = head[u] ;
head[u] = w ;
} void tarjan(int u)
{
int v,t ;
int minn = dfn[u] = low[u] = cnt++ ;
Q.push(u) ;
for(int k = head[u] ; k+ ; k = Edge[k].next)
{
v = Edge[k].v ;
if(dfn[v] == -)
tarjan(v) ;
minn = min(minn,low[v]) ;
}
if(minn < low[u]) {low[u] = minn ; return ;}
do
{
ID[t = Q.top()] = cntt ;
low[t] = n ;
out[cntt]++ ;
Q.pop() ;
}while(t != u) ;
cntt++ ;
} void Init()
{
memset(head,-,sizeof(head)) ;
memset(dfn,-,sizeof(dfn)) ;
memset(in,,sizeof(in)) ;
memset(out,,sizeof(out)) ;
cnt = cntt = ans = ;
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
Init() ;
int u,v ,flag;
for(int i = ; i < m ; i++)
{
scanf("%d %d",&u,&v) ;
addedge(u-,v-,i) ;
}
for(int i = ; i < n ; i++)
if(dfn[i] == -)
tarjan(i) ;
for(int i = ; i < n ; i++)
{
for(int j = head[i] ; j+ ; j = Edge[j].next)
{
int a = ID[i],b = ID[Edge[j].v] ;
if(a != b) in[ID[i]]++ ;
}
}
for(int i = ; i < cntt ; i++)
{
if(!in[i])
{
ans++ ;
flag = i ;
}
}
if(ans == ) printf("%d\n",out[flag]) ;
else printf("0\n") ;
}
return ;
}
POJ 2186 Popular Cows(Tarjan)的更多相关文章
- POJ 2186 Popular Cows(强连通)
Popular Cows Time Limit: 2000MS Memo ...
- poj 2186: Popular Cows(tarjan基础题)
题目链接 tarjan参考博客 题意:求在图上可以被所有点到达的点的数量. 首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG). 在这个DAG上,若存在不止 ...
- POJ 2186.Popular Cows (强连通)
强连通缩点,统计入度为1的缩点后的点的个数 个数1的话输出这个强连通分量的点的数量 否则输出0: code /* Kosaraju算法,无向图的强连通分量,时间复杂度O(n+m) 思路: 按照图G的深 ...
- POJ 2186 Popular Cows(强联通+缩点)
Description Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= ...
- POJ 2186 Popular Cows(Targin缩点)
传送门 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31808 Accepted: 1292 ...
- poj 2186 Popular Cows【tarjan求scc个数&&缩点】【求一个图中可以到达其余所有任意点的点的个数】
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27698 Accepted: 11148 De ...
- POJ 2186 Popular Cows(强连通分量Kosaraju)
http://poj.org/problem?id=2186 题意: 一个有向图,求出点的个数(任意点可达). 思路: Kosaraju算法的第一次dfs是后序遍历,而第二次遍历时遍历它的反向图,从标 ...
- poj 2186 "Popular Cows"(强连通分量入门题)
传送门 参考资料: [1]:挑战程序设计竞赛 题意: 每头牛都想成为牛群中的红人. 给定N头牛的牛群和M个有序对(A, B),(A, B)表示牛A认为牛B是红人: 该关系具有传递性,所以如果牛A认为牛 ...
- POJ 2186 Popular Cows(强连通分量)
[题目链接] http://poj.org/problem?id=2186 [题目大意] 给出一张有向图,问能被所有点到达的点的数量 [题解] 我们发现能成为答案的,只有拓扑序最后的SCC中的所有点, ...
随机推荐
- 偶尔会用到的有用的CMD命令
1.解压CHM cd /d (如果你的chm文档在系统盘的话,就没有必要写这个/d) [你的chm文档的路径名] 回车 hh -decompile [源文件的保存路径] [要反编译的chm格式电子书] ...
- 命令行创建AVD
1.命令行创建AVD android create avd -n myAvd -t 8 -b armeabi-v7a -p d:\scard.img -s HVGA 2.删除AVD android d ...
- 牛客OJ——[编程题]A+B和C__如何输入多组测试数据(测试OK)
几个要注意的地方: (1)Java OJ,必须将类名写成Main (2)关于如何输入多组测试数据,用二维数组去存储是一个方法,直接在while里面做也可以 但是如果 (3)关于整形 ...
- 学习笔记1_Day09_Servlet
生命周期方法: l void init(ServletConfig):出生之后(1次): l void service(ServletRequest request, ServletRespons ...
- 查看帮助文档的一些方法:help,dir,type,func_global等
help与dir与type:在使用python来编写代码时,会经常使用python自带函数或模块,一些不常用的函数或是模块的用途不是很清楚,这时候就需要用到help函数来查看帮助.这里要注意下,hel ...
- oc 基础知识
一.枚举 结构体 typedef enum{ sexMan, sexWoman }Sex; tydedef struct{ int year; int month; int da ...
- CKRule BRMS-决策表使用说明
决策表的编辑有2个步骤,即规则包编辑.规则数据设置和发布. 1. 规则包编辑 双击CKBoot.exe打开CKRule规则引擎编辑界面.点新建,在左侧的工程窗口中,就会出现一个新的规则包.点击根结 ...
- 如何在浏览器网页中实现java小应用程序的功能
我们知道,java语言的运用就是面向对象实现功能,和c不同,java语言对于程序员来说,运用起来更为简便. 小应用程序与应用程序不同,小应用程序只能在与Java兼容的容器中运行,可以嵌入在HTML网页 ...
- Could not find action or result 导致 页面出现404错误
注意一下语句的写法(在login.jsp中的action) 在 struts.xml中 <action name="login" class="action.Lo ...
- 九度OJ 1386 旋转数组的最小数字 【算法】
题目地址:http://ac.jobdu.com/problem.php?pid=1386 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋 ...