hdu1269

题意

判断对于任意两点是否都可以互相到达(判断有向图强连通分量个数是否为 1 )。

分析

Tarjan 算法实现。

code

  1. #include<bits/stdc++.h>
  2. typedef long long ll;
  3. using namespace std;
  4. const int MAXN = 2e5 + 10;
  5. int n, m;
  6. struct Edge {
  7. int to, next;
  8. }e[MAXN];
  9. int cnt, head[MAXN];
  10. void addedge(int u, int v) {
  11. e[cnt].to = v;
  12. e[cnt].next = head[u];
  13. head[u] = cnt++;
  14. }
  15. int sz, dfn[MAXN], low[MAXN], vis[MAXN];
  16. int scc;
  17. stack<int> sta;
  18. void tarjan(int u) {
  19. dfn[u] = low[u] = ++sz;
  20. vis[u] = 1;
  21. sta.push(u);
  22. for(int i = head[u]; ~i; i = e[i].next) {
  23. int v = e[i].to;
  24. if(!dfn[v]) {
  25. tarjan(v);
  26. low[u] = min(low[u], low[v]);
  27. } else if(vis[v] && low[u] > dfn[v]) {
  28. low[u] = dfn[v];
  29. }
  30. }
  31. if(low[u] == dfn[u]) {
  32. scc++;
  33. while(1) {
  34. int id = sta.top(); sta.pop();
  35. vis[id] = 0;
  36. if(id == u) break;
  37. }
  38. }
  39. }
  40. int main() {
  41. while(scanf("%d%d", &n, &m) && (n + m)) {
  42. memset(vis, 0, sizeof vis);
  43. while(!sta.empty()) sta.pop();
  44. scc = cnt = sz = 0;
  45. memset(head, -1, sizeof head);
  46. memset(dfn, 0, sizeof dfn);
  47. for(int i = 0; i < m; i++) {
  48. int u, v;
  49. scanf("%d%d", &u, &v);
  50. addedge(u, v);
  51. }
  52. for(int i = 1; i <= n; i++) {
  53. if(!dfn[i]) tarjan(i);
  54. }
  55. puts(scc == 1 ? "Yes" : "No");
  56. }
  57. return 0;
  58. }

hdu1269(有向图强连通分量)的更多相关文章

  1. HDU1269 有向图强连通分量

    题目大意:问一个有向图是否任意两点在两个方向上互相连通. 有向图强连通分量定义:如果一个图中的任意两点在两个方向上都互相连通,则该图为强连通图.极大强连通图为有向图的强连通分量(注意是极大,不是最大. ...

  2. 有向图强连通分量的Tarjan算法

    有向图强连通分量的Tarjan算法 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G ...

  3. 有向图强连通分量 Tarjan算法

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...

  4. 【转】有向图强连通分量的Tarjan算法

    原文地址:https://www.byvoid.com/blog/scc-tarjan/ [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly con ...

  5. 图的连通性:有向图强连通分量-Tarjan算法

    参考资料:http://blog.csdn.net/lezg_bkbj/article/details/11538359 上面的资料,把强连通讲的很好很清楚,值得学习. 在一个有向图G中,若两顶点间至 ...

  6. 有向图强连通分量的Tarjan算法和Kosaraju算法

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...

  7. 算法笔记_144:有向图强连通分量的Tarjan算法(Java)

    目录 1 问题描述 2 解决方案 1 问题描述 引用自百度百科: 如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连 ...

  8. POJ3180(有向图强连通分量结点数>=2的个数)

    The Cow Prom Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1451   Accepted: 922 Descr ...

  9. 有向图强连通分量的Tarjan算法及模板

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强联通(strongly connected),如果有向图G的每两个顶点都强联通,称有向图G是一个强联通图.非强联通图有向 ...

随机推荐

  1. [Leetcode] 3sum-closest 给定值,最为相近的3数之和

    Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...

  2. CF869E The Untended Antiquity 解题报告

    CF869E The Untended Antiquity 题目描述 \(\text{Adieu l'ami}\). Koyomi is helping Oshino, an acquaintance ...

  3. The 13th Zhejiang Provincial Collegiate Programming Contest - D

    The Lucky Week Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the headmaster of the Marja ...

  4. 关于applePay详细讲解

    https://www.cnblogs.com/diweinan/p/6225501.html

  5. Java并发(7)- 你真的了解ReentrantReadWriteLock吗?

    引言 在前几篇文章中了解了ReentrantLock.Semaphore与CountDownLatch后,J.U.C包中基于AQS实现的并发工具类还剩一个比较重要的:读写锁ReentrantReadW ...

  6. 2、Distributed Optimization

    一.目录: Distributed dynamic programming (as applied to path-planning problems). Distributed solutions ...

  7. 如何让 linux unzip 命令 不输出结果

    unzip xx.zip > /dev/null 2>&1 unzip xx.zip > /dev/null前半部分是将标准输出重定向到空设备, 后面的2>&1 ...

  8. bzoj 1576: [Usaco2009 Jan]安全路经Travel——并查集+dijkstra

    Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第i行包含一个数 ...

  9. stdafx.h、stdafx.cpp的作用

    这两个文件用于建立一个预编译的头文件".PCH"和一个预定义的类型文件"STDAFX.OBJ".由于MFC体系结构非常大,各个源文件中都包含许多头文件,如果每次 ...

  10. sublime text 2学习(二):创建可复用的代码片段

    对于前端工程师来讲,写一个html页面的基本结构是体力活,每次去拷贝一个也麻烦,sublime text 2 提供了一个很好的复用代码片段.下面介绍一下创建一个html5的代码片段的过程. 在菜单上点 ...