题意:有 n 头牛,以及一些喜欢关系,牛 A 喜欢牛 B,这种关系可以传递,问有多少头牛被牧场上所有牛喜欢。

首先强连通,因为在同一个强连通分量中牛是等价的,然后对于一个有向无环图看是否只有一个强连通分量出度为 0 ,如果是,则这个强连通分量中的点都是答案,否则为 0。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stack>
  4. #include<queue>
  5. using namespace std;
  6.  
  7. const int maxn=;
  8. const int maxm=;
  9.  
  10. int head[maxn],point[maxm],nxt[maxm],size;
  11. int n,t,scccnt;
  12. int stx[maxn],low[maxn],scc[maxn],od[maxn];
  13. stack<int>S;
  14.  
  15. void init(){
  16. memset(head,-,sizeof(head));
  17. size=;
  18. memset(od,,sizeof(od));
  19. }
  20.  
  21. void add(int a,int b){
  22. point[size]=b;
  23. nxt[size]=head[a];
  24. head[a]=size++;
  25. }
  26.  
  27. void dfs(int s){
  28. stx[s]=low[s]=++t;
  29. S.push(s);
  30. for(int i=head[s];~i;i=nxt[i]){
  31. int j=point[i];
  32. if(!stx[j]){
  33. dfs(j);
  34. low[s]=min(low[s],low[j]);
  35. }
  36. else if(!scc[j]){
  37. low[s]=min(low[s],stx[j]);
  38. }
  39. }
  40. if(low[s]==stx[s]){
  41. scccnt++;
  42. while(){
  43. int u=S.top();S.pop();
  44. scc[u]=scccnt;
  45. if(s==u)break;
  46. }
  47. }
  48. }
  49.  
  50. void setscc(){
  51. memset(stx,,sizeof(stx));
  52. memset(scc,,sizeof(scc));
  53. t=scccnt=;
  54. for(int i=;i<=n;++i)if(!stx[i])dfs(i);
  55. for(int i=;i<=n;++i){
  56. for(int j=head[i];~j;j=nxt[j]){
  57. int k=point[j];
  58. if(scc[i]!=scc[k]){
  59. od[scc[i]]++;
  60. }
  61. }
  62. }
  63. }
  64.  
  65. int main(){
  66. int m;
  67. while(scanf("%d%d",&n,&m)!=EOF){
  68. init();
  69. while(m--){
  70. int a,b;
  71. scanf("%d%d",&a,&b);
  72. add(a,b);
  73. }
  74. setscc();
  75. int ans=;
  76. if(scccnt==)printf("%d\n",n);
  77. else{
  78. for(int i=;i<=scccnt;++i)if(!od[i])ans++;
  79. if(ans!=){
  80. printf("0\n");
  81. }
  82. else{
  83. ans=;
  84. for(int i=;i<=n;++i){
  85. if(!od[scc[i]])ans++;
  86. }
  87. printf("%d\n",ans);
  88. }
  89. }
  90. }
  91. return ;
  92. }

poj2186 强连通的更多相关文章

  1. poj2186 强连通缩点

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29773   Accepted: 12080 De ...

  2. POJ2186 强连通分量+缩点

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 40234   Accepted: 16388 De ...

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

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

  4. 强连通分量+poj2186

    强连通分量:两个点能够互相连通. 算法分解:第一步.正向dfs全部顶点,并后序遍历 第二步,将边反向,从最大边dfs,构成强连通分量 标号最大的节点属于DAG头部,cmp存一个强连通分量的拓扑序. p ...

  5. POJ2186 Popular Cows(强连通分量)

    题目问一个有向图所有点都能达到的点有几个. 先把图的强连通分量缩点,形成一个DAG,那么DAG“尾巴”(出度0的点)所表示的强连通分量就是解,因为前面的部分都能到达尾巴,但如果有多个尾巴那解就是0了, ...

  6. POJ2186 Popular Cows 强连通分量tarjan

    做这题主要是为了学习一下tarjan的强连通分量,因为包括桥,双连通分量,强连通分量很多的求法其实都可以源于tarjan的这种方法,通过一个low,pre数组求出来. 题意:给你许多的A->B ...

  7. poj2186 Popular Cows(强连通)

    崇拜有传递性.求所有牛都崇拜的牛tarjan算法求强连通. 如果不连通就不存在.如果联通,缩点后唯一一个出度为零的点就是答案,有多个则不存在. #include <vector> #inc ...

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

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

  9. poj2186 Popular Cows --- 强连通

    给一个有向图,问有多少结点是其它全部结点都能够到达的. 等价于,在一个有向无环图上,找出度为0 的结点.假设出度为0的结点仅仅有一个,那么这个就是答案.假设大于1个.则答案是0. 这题有环.所以先缩点 ...

随机推荐

  1. Program L 暴力求解

    Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...

  2. matlab blkproc

    有关blkproc 命令的使用 (2011-07-31 09:52:57) 标签: 杂谈 分类: matlab使用 如果你让matlab帮你计算最好的块大小,用bestblk函数,[MB,NB] = ...

  3. (转)UIApplication sharedApplication详细解释-IOS

    iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...

  4. 从github上面拷贝源码

    http://www.cnblogs.com/xing901022/p/4287064.html

  5. <转>用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...

  6. 等价表达式(noip2005)

    3.等价表达式 [问题描述]    兵兵班的同学都喜欢数学这一科目,中秋聚会这天,数学课代表给大家出了个有关代数表达式的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也 ...

  7. JS 基于面向对象的 轮播图1

    ---恢复内容开始--- 1 'use strict' 2 function Tab(id){ 3 if(!id)return; 4 this.oBox = document.getElementBy ...

  8. 创建一个Windows窗体

    20140702加: WS_OVERLAPPEDWINDOW这个属性如果写成WS_OVERLAPPED,则窗口没有最大最小按钮以及左边的系统的菜单. vs2010下的代码提示快捷键:CTRL + J ...

  9. 极客DIY:打造属于自己的无线移动渗透测试箱

    本文中介绍的工具.技术带有一定的攻击性,请合理合法使用. 你想不想拥有一款属于自己的移动无线渗透测试箱,如果你感兴趣,下面介绍的设备将会对你很有帮助.这个箱子被称为“MiTM(中间人攻击)WiFi箱” ...

  10. php大力力 [005节] php大力力简单计算器001

    2015-08-22 php大力力005. php大力力简单计算器001: 上网看视频,看了半天,敲击代码,如下: <html> <head> <title>简单计 ...