题意:
      有一群老牛,给你一些关系,a b表示牛a仰慕牛b,最后问你有多少个牛是被所有牛仰慕的。

思路:

      假如这些仰慕关系不会出现环,那么当且仅当只有一只牛的出度为0的时候答案才是1,都则就是0,再假设所有的关系正好组成了一个环,那么就是说明每只牛都没其他所有牛仰慕,那么答案就是n,所以我们可以像强联通缩点之后看是否有且仅有一个出度为0的,如果有那么答案就是那个强联通分量的元素个数,否则就是0,因为同一个强联通里面的点有着相同的性质.


#include<stdio.h>
#include<string.h>
#include<stack>#define N_node 10000 + 100
#define N_edge 50000 + 500using namespace std;typedef struct
{int to ,next;
}STAR;typedef struct
{int a ,b;
}EDGE;STAR E1[N_edge] ,E2[N_edge];
EDGE edge[N_edge];
int list1[N_node] ,list2[N_node] ,tot;
int Belong[N_node] ,cont;
int out[N_node] ,sum[N_node];
int mark[N_node];
stack<int>st;void add(int a ,int b)
{E1[++tot].to = b;E1[tot].next = list1[a];list1[a] = tot;E2[tot].to = a;E2[tot].next = list2[b];list2[b] = tot;
}void DFS1(int s)
{mark[s] = 1;for(int k = list1[s] ;k ;k = E1[k].next){int to = E1[k].to;if(!mark[to])DFS1(to);}st.push(s);
}void DFS2(int s)
{Belong[s] = cont;sum[cont] ++;mark[s] = 1;for(int k = list2[s] ;k ;k = E2[k].next){int to = E2[k].to;if(!mark[to]) DFS2(to);}
}int main ()
{int n ,m ,a ,b ,i;while(~scanf("%d %d" ,&n ,&m)){memset(list1 ,0 ,sizeof(list1));memset(list2 ,0 ,sizeof(list2));tot = 1;for(i = 1 ;i <= m ;i ++){scanf("%d %d" ,&a ,&b);add(a ,b);edge[i].a = a;edge[i].b = b;}while(!st.empty())st.pop();memset(mark ,0 ,sizeof(mark));for(i = 1 ;i <= n ;i ++)if(!mark[i])DFS1(i); cont = 0;memset(mark ,0 ,sizeof(mark));memset(sum ,0 ,sizeof(sum));while(!st.empty()){int to = st.top();st.pop();if(!mark[to]){cont ++;DFS2(to);}}memset(out ,0 ,sizeof(out));for(i = 1 ;i <= m ;i ++){a = Belong[edge[i].a];b = Belong[edge[i].b];if(a == b) continue;out[a] ++;}int ss = 0 ,mk = -1;for(i = 1 ;i <= cont ;i ++){if(!out[i]){ss ++;mk = i;}}if(ss == 1) printf("%d\n" ,sum[mk]);else printf("0\n");}return 0;
}

POJ2186 强联通相关推荐

  1. poj2186强联通(牛仰慕)

    题意:       有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路:       想想,是不是一个环中的老牛的关系都是一 ...

  2. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...

  3. [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165 题意:问一个有向图中是否有任意两点可以到达. 读错题就彻底输了,读成判断是否有任意条路,使得经过 ...

  4. POJ1904 强联通(最大匹配可能性)

    题意:       有n个王子,n个公主,然后给你每个王子喜欢的公主,最后问你在不影响最大匹配的前提下,每个王子可以匹配那些公主. 思路:       是hdu4685的减弱版,之前研究过hdu468 ...

  5. [拓扑排序/强联通分量] [NOIP201402] 信息传递

    信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日 ...

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

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

  7. [图论]强联通分量+缩点 Summer Holiday

    Summer Holiday Description 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系 ...

  8. CodeForces 1213F (强联通分量分解+拓扑排序)

    传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...

  9. 无向图强联通分量-洛谷 P2860 [USACO06JAN]冗余路径Redundant Paths

    https://www.luogu.org/problem/show?pid=2860 这个就是无向图的强联通: 有向图的两点再一个分量里,是x可以到y,y也可到x: 但无向图本来就是双向的,所以我们 ...

最新文章

  1. 学霸女孩放弃保研再次高考,原因让人泪目…
  2. CentOS 7.0下使用yum安装MySQL
  3. C++操作SQLite简明教程
  4. .netcore 分布式事务CAP2.6之控制台使用
  5. CV Code|计算机视觉开源周报20200502期
  6. linux系统结构简概
  7. 学习SQL:SQL Server日期和时间函数
  8. 具有Ubuntu和Azure Data Studio的Linux上SQL Server 2019
  9. python基于pillow库的简单图像处理
  10. python 多个列表_python遍历多个列表生成列表或字典
  11. tp3.2 URL生成
  12. 视频工具下载(m3u8、MP4)
  13. unity物体移动的几种常用方式
  14. C# Email发送邮件
  15. 米的换算单位和公式_米的单位换算公式大全二年级(简便易记的单位米换算方法)...
  16. BFS、DFS复杂度分析(时间、空间)
  17. 触摸屏单个按键远程控制led
  18. [转载]无线网络优化
  19. CC26xx(CortexM3) IO Control
  20. Python爬虫自学笔记(三)动态网页爬取

热门文章

  1. MySQL5.7号称永久解决了复制延迟问题的并行复制
  2. Hbase源码分析:Hbase UI中Requests Per Second的具体含义
  3. linux高编线程-------线程的创建,终止
  4. 【VM单机模拟系列】VMware P2V简单实现
  5. 都大二下学期了,说说读大学的感受吧
  6. Tautology--POJ 3295
  7. Dynamips和Vmware完成CCVP试验(1)
  8. legend3---用Homestead配置后报错“No input file specified.”
  9. html标签 marquee 滚动
  10. iptables 过滤条件(Matches)