题意:求其他所有牛都认为其牛的牛的个数。

解题关键:targin算法模板题,缩点形成一棵树,并不一定是棵树,可能含有多个入度为0的点,寻找出度为0的点(缩点之后的点)的个数,如果个数大于0,则无解,否则输出该强连通分量内的个数。

注意targin算法的数组不需要memset。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAXN 10010
#define MAXM 100010
struct edge{
int to,nxt;
}e[MAXM];
int degree[MAXN];
int head[MAXN],st[MAXN],dfn[MAXN],lowest[MAXN],belong[MAXN];
bool inst[MAXN];
int n,m,scnt,top,tot;//scnt从1开始
void init(){
memset(head,-,sizeof head);
memset(degree,,sizeof degree);
scnt=top=tot=;
} void add_edge(int u, int v){
e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot++;
} void Tarjan(int u){
dfn[u]=lowest[u]=++tot;
inst[u]=;
st[top++]=u;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
if(!dfn[v]){
Tarjan(v);
lowest[u]=min(lowest[u],lowest[v]);
}
else if(inst[v]){
lowest[u]=min(lowest[u],dfn[v]);//也可用lowest
}
}
if(dfn[u]==lowest[u]){
scnt++;
int t;
do{
t=st[--top];
inst[t]=false;
belong[t]=scnt;
}while(t!=u);
}
} inline int read(){
char k=;char ls;ls=getchar();for(;ls<''||ls>'';k=ls,ls=getchar());
int x=;for(;ls>=''&&ls<='';ls=getchar())x=(x<<)+(x<<)+ls-'';
if(k=='-')x=-x;return x;
} void solve(){//缩点
for(int i=;i<=n;i++) if(!dfn[i]) Tarjan(i);
for(int i=;i<=n;i++){
for(int j=head[i];j!=-;j=e[j].nxt){
if(belong[i]!=belong[e[j].to]){
degree[belong[i]]++;
}
}
}
int sum=,x=;
for(int i=;i<=scnt;i++) if(!degree[i]) sum++,x=i;//记录索引
if(sum!=){
printf("0\n");
return;
}
sum=;
for(int i=;i<=n;i++){
if(belong[i]==x) sum++;
}
printf("%d\n",sum);
return;
} int main(){
int a,b;
while(scanf("%d%d",&n,&m)!=EOF){
init();
while(m--){
a=read(),b=read();
add_edge(a,b);
}
solve();
}
return ;
}

[poj2186]Popular Cows(targin缩点)的更多相关文章

  1. 强连通分量tarjan缩点——POJ2186 Popular Cows

    这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...

  2. 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows

    P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所 ...

  3. 【Tarjan缩点】POJ2186 Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35644   Accepted: 14532 De ...

  4. POJ-2186 Popular Cows,tarjan缩点找出度为0的点。

    Popular Cows 题意:一只牛崇拜另外一只牛,这种崇拜关系可以传导.A->B,B->C =>A->C.现在给出所有的关系问你有多少牛被其他所有的牛都崇拜. 思路:就是一 ...

  5. POJ2186 Popular Cows [强连通分量|缩点]

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31241   Accepted: 12691 De ...

  6. POJ 2168 Popular cows [Tarjan 缩点]

                                                                                                         ...

  7. POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23445   Accepted: 9605 Des ...

  8. poj2186 Popular Cows 题解——S.B.S.

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29642   Accepted: 11996 De ...

  9. POJ2186:Popular Cows(tarjan+缩点)

    题目解析: 这题题意没什么好说的,解法也挺简单的,只要会tarjan算法+只有一个出度为0的强连通分量题目有解这题就迎刃而解了. #include <iostream> #include ...

随机推荐

  1. Allegro PCB中封装焊盘替换操作详解

    Allegro PCB中有些功能在某种情况下使用会产生神奇的效果,但有部分人不会或不熟悉在特定情况下使用某些功能来解决问题.如焊盘替换,有些特殊器件(如下图)封装按照datasheet给出的参考制作, ...

  2. 6.6.1 F# 中函数调用的类型判断

    6.6.1 F# 中函数调用的类型判断 尽管,在 F# 中能够用尖括号指定类型參数值.与 C# 中的方式同样.但这样的方法非常少使用. 原因是,当编译器无法判断出全部的信息,须要程序猿的帮助时.我们仅 ...

  3. KVM技术

    今天是周六,看到一片KVM相关的文章,感觉写得很不错,翻译了,原文在这里:KVM Technology 在开放服务器虚拟化的应用方面,KVM虚拟化技术近年来广受关注.自从2006年10月份诞生以来,其 ...

  4. 2016最新手机号码正则、身份证JS正则表达式

    js最新手机号码.身份证正则表达式   身份证正则: //身份证正则表达式(15位) isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1] ...

  5. 2015最新iherb海淘攻略-图文入门教程-6月免邮

    注:仅仅有首次下单才享有新人优惠10$,大家下单之后千万不要取消后.否则之后则不享有新人优惠. 注:眼下Sino-海淘客国际物流已取消,仅有UCS合众速递. IHerb是美国最热门的海淘海购网站之中的 ...

  6. 通过css选择器class给元素添加cursor的坑

    笔者在chrome中遇到了奇特的问题,在通过class给元素添加cursor的自定义图片时.出现了"Invald property value"提示,crosshair.help等 ...

  7. px dp 互转

    /** * * px dip 转换 */ public class DensityUtil { /** * 根据手机分辨率 dip 转 px */ static public int dip2px(C ...

  8. MongoDB 倾向于将数据都放在一个 Collection 下吗?

    不是这样的. Collection 的单个 doc 有大小上限,现在是 16MB,这就使得你不可能把所有东西都揉到一个 collection 里.而且如果 collection 结构过于复杂,既会影响 ...

  9. ubuntu安装ros indigo

    版本是14.04.1 一.先配置 1.点击新立得软件包管理器,输入密码exbot123, 2,点击最上面一栏的设置,选择软件源,前四个打勾,后一个不打,把sevice america改成mainsev ...

  10. 青岛理工ACM交流赛 J题 数格子算面积

    数格子算面积 Time Limit: 1000MS Memory limit: 262144K 题目描述 给你一个多边形(用’\’和’/’表示多边形的边),求多边形的面积. 输入  第一行两个正整数h ...