原题

原题链接

题目大意

题目会给一个牛的有向图,A→B意味着A认为B流行,如果A→B,B→C,则A和B都认为C流行,要求求出这群牛中被所有牛认为流行的牛的数.

题目分析

这道题中会存在一些情况例如 A→B,B→C,C→A这种,就是A B C强连通,所以需要把这些强连通的点集压缩成一个点并进行拓扑排序,然后只要找序列中的最后一个点,用dfs检查一遍是否能跑遍全图,是则输出该点被压缩的数量,否则输出0.找强连通可以先用dfs扫一下有向图(确保所有点都被该dfs扫过),再将地图上的所有路反向,再用dfs从上次dfs的第一个开始,扫遍所有的点,这次每扫一次dfs都能求解出一个强连通分量,因为路方向后,只有强连通里的点不受影响,各个强连通分量都会被隔绝,因此可以找出所有的强连通分量.

代码

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <string>
 8 #include <utility>
 9 #include <queue>
10 #include <stack>
11 #include <map>
12 const int INF=0x3f3f3f3f;
13 using namespace std;
14
15 vector<int> G[10001],rG[10001]; //G是放输入边的,rG是放反向后的边的
16 vector<int> vs; //用来存第一次dfs 点的遍历顺序
17 bool vis[10001]; //检查点是否扫过
18 int cmp[10001]; //表示拓扑排序中的序号
19
20 void add(int from,int to) //添加边
21 {
22     G[from].push_back(to);
23     rG[to].push_back(from);
24 }
25
26 void dfs(int s) //第一次dfs
27 {
28     vis[s]=true;
29     for(int i=0;i<G[s].size();i++)
30     if(!vis[G[s][i]]) dfs(G[s][i]);
31     vs.push_back(s);
32 }
33
34 void rdfs(int s,int k) //第二次dfs k是拓扑排序序号
35 {
36     vis[s]=true;
37     cmp[s]=k;
38     for(int i=0;i<rG[s].size();i++)
39     if(!vis[rG[s][i]]) rdfs(rG[s][i],k);
40 }
41
42 int main()
43 {
44     int n,m;
45     cin>>n>>m;
46     while(m--)
47     {
48         int a,b;
49         scanf("%d%d",&a,&b);
50         add(a,b);
51     }
52
53     for(int i=1;i<=n;i++)
54     if(!vis[i]) dfs(i);
55
56     memset(vis,0,sizeof(vis));
57     int k=0;
58
59     for(int i=vs.size()-1;i>=0;i--)
60     if(!vis[vs[i]]) rdfs(vs[i],k++);
61
62     int u,ans=0; //找出拓扑序列最后一个点
63     for(int i=1;i<=n;i++)
64     if(cmp[i]==k-1) u=i,ans++;
65
66     //检查最后一个强连通分量上的一个点能否经过所有的点(即被所有牛认为流行)
67     memset(vis,0,sizeof(vis));
68     rdfs(u,0);
69     for(int i=1;i<=n;i++)
70     if(!vis[i])
71     {
72         ans=0;
73         break;
74     }
75     cout<<ans<<endl;
76     return 0;
77 }

转载于:https://www.cnblogs.com/VBEL/p/10497655.html

Popular Cows POJ 2186(强连通分解)相关推荐

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

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

  2. poj 2186 强连通分量

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

  3. poj 2186(强连通分量)

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

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

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

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

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

  6. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  7. 动态规划训练20 [Treats for the Cows POJ - 3186 ]

    Treats for the Cows POJ - 3186 简单的区间DP,就不解释了. #include<iostream> #include<cstdio> using ...

  8. POJ NOI0105-43 质因数分解

    问题链接:POJ NOI0105-43 质因数分解. 总时间限制: 1000ms 内存限制: 65536kB 描述  已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数.输入 输入只有一行, ...

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

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

最新文章

  1. 用 Parser Combinator 解析 Cirru 的缩进语法
  2. 如何清除word复制过来的文字背景色的好方法?
  3. rgb cmyk lab的区别
  4. 201521123087 蒋勃超 软工作业
  5. 如何用Pygame写游戏(十)
  6. IOS UI 第三篇:基本UI
  7. 使用Task简化Silverlight调用Wcf
  8. logstash收集java日志,多行合并成一行
  9. 学会这个python数字大全,让你不再发愁
  10. 夜神无限检查服务器新版本,夜神模拟器电脑最新版
  11. 穿越“惊世骇俗”的美景
  12. 抖音自拍特效如何java实现_抖音特效在 Web 端的实现
  13. 应用后台被回收,点击崩溃
  14. 计算机操作系统笔记第八章磁盘存储器的管理
  15. Flash----读写外部Flash
  16. 程序员转正述职报告_程序员转正的述职报告【五篇】
  17. 好文分享 努力从何时开始都不晚 跟自己比 不断进步
  18. Amazon Prime Video为《周四橄榄球之夜》推出新功能,让全球NFL球迷能够自定义流媒体播放体验
  19. 倒霉。。。倒霉。。。。。
  20. oracle原理视频,[Oracle] 甲骨论 价值1.67万的Oracle视频课程 共46节课

热门文章

  1. 微信小程序云开发,快速生成短信验证码
  2. 汇编语言(1~7音阶)
  3. SCL定时 1500_西门子SCL编程实例 | 多个灯的逻辑控制程序
  4. 把分钟转化为小时分钟
  5. 既然有 HTTP 请求,为什么还要用 RPC 调用?
  6. SpringMVC响应的HTTP状态码
  7. C6奥迪A6L不缺机油:启动时偶尔报“机油压力不足”故障
  8. leetcode 1737 解题思路及注释code 贪心
  9. uni-app实战教程
  10. makedown公式和绘图