题目链接

tarjan参考博客

题意:求在图上可以被所有点到达的点的数量。

首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG)。

在这个DAG上,若存在不止一个所有点均可到达的点,则所有点不满足题目要求。若存在一个,则该点所代表的连通分量的点数即为答案。

//DAG(有向无环图)上面至少存在一个出度为0的点,否则必然可以成环。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<stack>
  4. #include<vector>
  5. using namespace std;
  6. typedef long long LL;
  7.  
  8. ;
  9. int n,m;
  10. vector<int> adj[N];
  11. int time_tag;
  12. int dfn[N]; // dfs序
  13. int low[N]; // low[u]表示u及其后代所能追溯到的最早的祖先点v的dfn[v]值
  14. int sccno[N];
  15. int scc_cnt;
  16. int size[N]; //size[i]表示编号为i的连通分量的大小
  17. int d[N]; //d[i]==0时表示,编号为i的连通分量不认为任何其他分量popular
  18. stack<int> st;
  19.  
  20. void init()
  21. {
  22. time_tag=scc_cnt=;
  23. memset(sccno,,sizeof(sccno));
  24. memset(dfn,,sizeof(dfn));
  25. ;i<=n;i++) adj[i].clear();
  26. memset(d,,sizeof(d));
  27. }
  28.  
  29. void dfs(int u)
  30. {
  31. dfn[u]=low[u]=++time_tag;
  32. st.push(u);
  33. ;i<adj[u].size();i++)
  34. {
  35. int v=adj[u][i];
  36. if(!dfn[v])
  37. {
  38. dfs(v);
  39. low[u]=min(low[u],low[v]);
  40. }
  41. else if(!sccno[v])
  42. low[u]=min(low[u],dfn[v]);
  43. }
  44. if(low[u]==dfn[u])
  45. {
  46. ;
  47. scc_cnt++;
  48. )
  49. {
  50. int x=st.top();st.pop();
  51. sccno[x]=scc_cnt;
  52. cnt++;
  53. if(x==u) break;
  54. }
  55. size[scc_cnt]=cnt;
  56. }
  57. }
  58. int main()
  59. {
  60. while(~scanf("%d%d",&n,&m))
  61. {
  62. init();
  63. ; i<m; i++)
  64. {
  65. int u,v;
  66. scanf("%d%d",&u,&v);
  67. adj[v].push_back(u);
  68. }
  69. ; i<=n; i++) //强连通分量缩点
  70. if(!dfn[i]) dfs(i);
  71. ; i<=n; i++)
  72. ; j<adj[i].size(); j++)
  73. if(sccno[i]!=sccno[adj[i][j]]) d[sccno[adj[i][j]]]++;
  74. ;
  75. ; i<=scc_cnt; i++)
  76. if(!d[i]) res++;
  77. )
  78. ; i<=scc_cnt; i++)
  79. {
  80. )
  81. {
  82. printf("%d\n",size[i]);
  83. break;
  84. }
  85. }
  86. else
  87. puts(");
  88. }
  89. }

poj 2186: Popular Cows(tarjan基础题)的更多相关文章

  1. poj 2186 Popular Cows tarjan

    Popular Cows Description Every cow's dream is to become the most popular cow in the herd. In a herd ...

  2. POJ - 2186  Popular Cows tarjain模板题

    http://poj.org/problem?id=2186 首先求出所有的强连通分量,分好块.然后对于每一个强连通分量,都标记下他们的出度.那么只有出度是0 的块才有可能是答案,为什么呢?因为既然你 ...

  3. [poj 2186]Popular Cows[Tarjan强连通分量]

    题意: 有一群牛, a会认为b很帅, 且这种认为是传递的. 问有多少头牛被其他所有牛认为很帅~ 思路: 关键就是分析出缩点之后的有向树只能有一个叶子节点(出度为0). 做法就是Tarjan之后缩点统计 ...

  4. POJ 2186 Popular Cows tarjan缩点算法

    题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...

  5. 强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)

    poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且能够传递, 即1欢迎2不代表2欢迎1, 可是假设2也欢迎3那么1也欢迎3. 求 ...

  6. poj 2186 Popular Cows 【强连通分量Tarjan算法 + 树问题】

    题目地址:http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  7. tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows

    缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...

  8. poj 2186 Popular Cows (强连通分量+缩点)

    http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissi ...

  9. POJ 2186 Popular Cows (强联通)

    id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 655 ...

  10. POJ 2186:Popular Cows Tarjan模板题

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25945   Accepted: 10612 De ...

随机推荐

  1. Jenkins 添加新用户

    下面重点记录下jenkins安装后的一些配置: (1)添加用户权限 jenkins初次登陆后,要先注册一个用户作为管理员: 依次点击“系统管理”->“Configure Global Secur ...

  2. jsc2019_qualC Cell Inversion

    先吐槽一下这个比赛的奇怪名字 这个破名字让我实在不知道博客标题该叫啥/px 题目大意 给你一个长度为2n的序列 包括W和B 每次可以选一个区间将里面的颜色反转 但是每个点只能被作为端点选一次 问将序列 ...

  3. 用BP人工神经网络识别手写数字

    http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb5 ...

  4. Vim 8.0 版本安装方法及添加Python支持

    利用Git安装 最简单也是最有效的方法 1. 获取Vim仓库: git clone https://github.com/vim/vim.git 2. 升级到最新的版本: cd vim git pul ...

  5. php 的定界符 <<<eof 的问题

    PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特 ...

  6. [LeetCode] 287. Find the Duplicate Number(Floyd判圈算法)

    传送门 Description Given an array nums containing n + 1 integers where each integer is between 1 and n  ...

  7. System.Web.Script.Serialization的引用

    解决方案: 找到C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 ==>System.Web.Extensions.d ...

  8. msyql join语句执行原理

    首先,我建了一个表t2,里面有1000条数据,有id,a,b三个字段,a字段加了索引 然后我又建立一个t1表,里面有100条数据,和t2表的前一百条数据一致,也是只有id,a,b三个字段,a字段加了索 ...

  9. Node.js实战4:标准IO及console对像。

    IO即输入输出. console用于Nodejs程序信息输出. Nodejs的IO操作,通过process.stdout.process.stdin来操作. 下面的例子,将简单展示这两个函数的用法.程 ...

  10. vue 使用 computed 结合 filter 实现数据的的过滤和排序

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...