题意:有n(n<=10000)头牛,每头牛都想成为最受欢迎的牛,给出m(m<=50000)个关系,如(1,2)代表1欢迎2,关系可以传递,但是不是相互的,那么就是说1欢迎2不代表2欢迎1,但是如果2欢迎3那么1也欢迎3.
输入第一行为n,m第2到1+m行为m个欢迎关系,求被所有牛都欢迎的牛的数量。
思路:Tarjan求强联通分量做。
1.如果图不联通,直接输出零。(不解释)
2.如果有超过1个出度=0的点,直接输出零。因为它肯定不是最受欢迎的牛。
3.如果只有一个出度等于零的点,那它的强联通分量里的所有点都是最受欢迎的牛。
题目在这里

#include <stack>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int low[10005],dfn[10005],n,m,cnt=0,t=0,p[10005],out[10005],ans=0;
bool vis[10005];
stack<int>stk;
vector<int>v[10005];
void tarjan(int x)
{low[x]=dfn[x]=++cnt,vis[x]=1,stk.push(x);for(int i=0;i<v[x].size();i++)if(!dfn[v[x][i]])tarjan(v[x][i]),low[x]=min(low[v[x][i]],low[x]);else if(vis[v[x][i]])low[x]=min(low[x],dfn[v[x][i]]);if(dfn[x]==low[x]){int y;t++;do y=stk.top(),stk.pop(),vis[y]=0,p[y]=t;while(y!=x);}
}
int main()
{register int x,y,q;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d",&x,&y),v[x].push_back(y);for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)for(int j=0;j<v[i].size();j++)if(p[v[i][j]]!=p[i])out[p[i]]++;for(int i=1;i<=t;i++)if(!out[i])ans++,q=i;if(ans==1){for(int i=1;i<=n;i++)if(p[i]==q)ans++;printf("%d",ans-1);}else puts("0");
}

// by Sirius_Ren
#include <stack>
#include <cstdio>
#define f(X) for(int i=1;i<=X;i++)
using namespace std;
stack<int>s;
int xx,yy,n,m,tot=1,cnt=1,t=0,first[10005],next[50005],v[50005],low[10005],dfn[10005],p[10005],vis[10005],out[10005];
void add(int x,int y){v[tot]=y;next[tot]=first[x];first[x]=tot++;}
void tarjan(int x){dfn[x]=low[x]=cnt++,vis[x]=1,s.push(x);for(int i=first[x];i;i=next[i])if(!dfn[v[i]])tarjan(v[i]),low[x]=min(low[v[i]],low[x]);else if(vis[v[i]])low[x]=min(dfn[v[i]],low[x]);if(low[x]==dfn[x]){t++;do xx=s.top(),s.pop(),vis[xx]=0,p[xx]=t;while(xx!=x);}
}
int main(){scanf("%d%d",&n,&m);f(m)scanf("%d%d",&xx,&yy),add(xx,yy);f(n)if(!dfn[i])tarjan(i);f(n)for(int j=first[i];j;j=next[j])if(p[v[j]]!=p[i])out[p[i]]++;yy=-1;f(t)if(!out[i])yy++,xx=i;if(!yy){f(n)if(p[i]==xx)yy++;printf("%d\n",yy);}else puts("0");
}

第二遍

转载于:https://www.cnblogs.com/SiriusRen/p/6532485.html

POJ 2186 Tarjan相关推荐

  1. Popular Cows POJ - 2186(tarjan算法)+详解

    题意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有 N头牛,给你M对整数(A,B),表示牛 A认为牛B受欢迎.这种关系是具有传递性的,如果 A认为 B受欢迎, B认为 C受欢迎,那么牛 A也认为牛 ...

  2. Poj 2186 Popular Cows(Tarjan 强连通缩点)

    传送门:Poj 2186 题意:给你n头牛,m种关系,A牛认为B牛是popular的,B牛认为C牛是popular的,则A也认为C是popular的,问最终有几头被所有牛认为是popular的牛 题解 ...

  3. poj 2186 强连通分量

    poj 2186 强连通分量 传送门 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 33414 Acc ...

  4. POJ 2186 Popular Cows(Tarjan)

    http://poj.org/problem?id=2186 题意 :给你n头牛,m对关系,每对关系由两个编号组成,u和v代表着u认为v是受欢迎的,如果1认为2是受欢迎的,2认为3是受欢迎的,那1认为 ...

  5. POJ 2186 popular cow 有向图的强联通问题 Tarjan算法

    参考:http://hi.baidu.com/1093782566/blog/item/e5a0e9229913bd048b82a175.html http://www.cppblog.com/Iro ...

  6. POJ 2186 挑战 --牛红人 强连通分量——Tarjan

    题意:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的,如:a欢迎b,b欢迎c,那么a欢迎c .另外每个奶牛都是欢迎他自己的.求出被所有的奶牛欢迎的奶牛的数目.#i ...

  7. 【POJ - 2186】Popular Cows (Tarjan缩点)

    题干: Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= ...

  8. POJ 2186 Popular Cows(强连通分量缩点,Tarjan算法)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578 [解题报告] 给你一个有向图,问你有多少个点可以被其它 ...

  9. POJ 2186 Popular Cows (强联通分量)

    链接 :http://poj.org/problem?id=2186 一个联通分量里的所有的牛满足任何一个被其他牛认为是红人.强联通缩点之后 只需要找到一个且只有一个联通分量且它的出度为0 答案就是这 ...

最新文章

  1. php 缓冲区,PHP的输出缓冲区
  2. TCP/IP详解--第十六章
  3. 校园导游java版,校园导游系统Word版
  4. SCN风波又起,2019年6月之前Oracle必须升级吗?
  5. leetCode:35. 搜索插入位置
  6. 基于matlab的不规则面积图像测量,基于matlab的不规则面积图像测量.doc
  7. android sdk dns,Android SDK 导入
  8. [Bullet3]常见物体和初始化
  9. 混沌分形之朱利亚集(JuliaSet)
  10. 樊登读书会掌控读后感_樊登读书刻意练习读后感
  11. python复数什么意思_python 复数是什么意思
  12. 推荐一个爬虫神器:You-Get,小白也会用
  13. string split 相关知识
  14. 科技不总是冷冰冰,智能便携打印机让文字更有温度!——硬件方案篇
  15. Markdown进阶
  16. 常用eclipse快捷键
  17. 2022.4.11-4.17 AI行业周刊(第93期):AI行业的困局
  18. 利用轮播图制作简单游戏页面
  19. PAT (Advanced Level) Practice 1165 Block Reversing
  20. PHP使用phpqrcode生成二维码

热门文章

  1. Coding and Paper Letter(二十)
  2. AWS Device Farm介绍及Appium踩过的坑
  3. SDN商用落地:遍地开花不代表全面实现
  4. 如何将传统OA移动化?
  5. vue.js 初体验— Chrome 插件开发实录
  6. URL/URI/URN的认识
  7. 【转载】通过sqlserver日志恢复误删除的数据
  8. #HTTP协议学习# (七)代理
  9. Windows Live Writer新版新功能试用
  10. python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)...