1. // 给你一个有向图,问你最少加几条边能使得该图强连通
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <string>
  6. #include <utility>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <queue>
  10. #include <stack>
  11. using namespace std;
  12. #define max(x,y) x>=y?x:y
  13. #define lowbit(x) x&(-x)
  14. typedef long long ll;
  15. const int N=;
  16. int n,m;
  17. int head[N],low[N],num[N];
  18. int in[N],out[N],be[N];
  19. int ans,cnt,ans1,ans2;
  20. int index;
  21. bool vis[N];
  22. struct Edge
  23. {
  24. int from,to,nex;
  25. }e[N*];
  26. stack<int>s;
  27. void init()
  28. {
  29. memset(head,-,sizeof(head));
  30. memset(num,-,sizeof(num));
  31. memset(vis,,sizeof(vis));
  32. memset(low,,sizeof(low));
  33. memset(in,,sizeof(in));
  34. memset(out,,sizeof(out));
  35. cnt=index=;
  36. }
  37. void add(int u,int v)
  38. {
  39. e[cnt].from=u;
  40. e[cnt].to=v;
  41. e[cnt].nex=head[u];
  42. head[u]=cnt++;
  43. }
  44. void tarjan(int u)
  45. {
  46. low[u]=num[u]=++index;
  47. vis[u]=;
  48. s.push(u);
  49. for (int i=head[u];i!=-;i=e[i].nex)
  50. {
  51. int v=e[i].to;
  52. if(num[v]==-)
  53. {
  54. tarjan(v);
  55. low[u]=min(low[u],low[v]);
  56. }
  57. else if(vis[v])
  58. {
  59. low[u]=min(low[u],num[v]);
  60. }
  61. }
  62. if(num[u]==low[u])
  63. {
  64. int x;
  65. ans++;
  66. do{
  67. x=s.top();
  68. s.pop();
  69. vis[x]=;
  70. be[x]=ans;
  71. }while(x!=u);
  72. }
  73. }
  74. int main()
  75. {
  76. while(~scanf("%d %d",&n,&m))
  77. {
  78. init();
  79. ans=;
  80. int a,b;
  81. for (int i=;i<m;i++)
  82. {
  83. scanf("%d %d",&a,&b);
  84. add(a,b);
  85.  
  86. }
  87. for (int i=;i<=n;i++)
  88. {
  89. if(num[i]==-)
  90. {
  91. tarjan(i);
  92. }
  93. }
  94. for (int i=;i<cnt;i++)
  95. {
  96. int a=e[i].from;
  97. int b=e[i].to;
  98. if(be[a]!=be[b])
  99. {
  100. in[be[b]]++;
  101. out[be[a]]++;
  102. }
  103. }
  104. ans1=ans2=;
  105. for (int i=;i<=ans;i++)//ans 从1开始。ans为原图强联通分量的个数、
  106. {
  107. if(!in[i])
  108. {
  109. ans1++;
  110. }
  111. if(!out[i])
  112. {
  113. ans2++;
  114. }
  115. }
  116. printf("%d\n",ans==?:max(ans1,ans2));
  117. }
  118. return ;
  119. }
  120.  
  121. /*
  122.  
  123. 3 2
  124. 1 2
  125. 2 3
  126.  
  127. 有3个联通快
  128.  
  129. */

hdu 3836 tarjain 求强连通分量个数的更多相关文章

  1. UVALive 4262——Trip Planning——————【Tarjan 求强连通分量个数】

    Road Networks Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Stat ...

  2. Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题

    Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...

  3. HDU - 3836 Equivalent Sets (强连通分量+DAG)

    题目大意:给出N个点,M条边.要求你加入最少的边,使得这个图变成强连通分量 解题思路:先找出全部的强连通分量和桥,将强连通分量缩点.桥作为连线,就形成了DAG了 这题被坑了.用了G++交的,结果一直R ...

  4. HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)

    迷宫城堡Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  5. HDU 1827 Summer Holiday(tarjan求强连通分量+缩点构成新图+统计入度+一点贪心思)经典缩点入门题

    Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. 求强连通分量模板(tarjan算法)

    关于如何求强连通分量的知识请戳 https://www.byvoid.com/blog/scc-tarjan/ void DFS(int x) { dfn[x]=lowlink[x]=++dfn_cl ...

  7. tarjan求强连通分量+缩点+割点以及一些证明

    “tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄>   自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...

  8. Tarjan求强连通分量,缩点,割点

    Tarjan算法是由美国著名计算机专家发明的,其主要特点就是可以求强连通分量和缩点·割点. 而强联通分量便是在一个图中如果有一个子图,且这个子图中所有的点都可以相互到达,这个子图便是一个强连通分量,并 ...

  9. tarjan求强连通分量+缩点+割点/割桥(点双/边双)以及一些证明

    “tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄>   自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...

随机推荐

  1. 《javascript设计模式》笔记之第十二章:装饰者模式

    一.装饰者模式的作用 为函数或者对象的方法添加一些行为.     二.装饰者模式的原理 装饰者模式不是直接修改对象,而是以要修改的对象为基础,新建一个对象.不过这个新建的对象看起来就像在原对象的基础上 ...

  2. 七,JOBC数据库编程

    七,JOBC数据库编程 七,JOBC数据库编程 一,java数据库编程步骤 1,将数据库驱动包考入lib目录: 2,加载驱动--整个操作数据库程序运行期间只需要加载一次 Class.forName(& ...

  3. Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)

    这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战. 第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是 ...

  4. HangFire 定时任务

    https://www.cnblogs.com/ecin/p/6201262.html#%E5%9F%BA%E4%BA%8E%E9%98%9F%E5%88%97%E7%9A%84%E4%BB%BB%E ...

  5. Kendo MVVM 数据绑定(四) Disabled/Enabled

    Kendo MVVM 数据绑定(四) Disabled/Enabled Disabled 和 Enabled 绑定可以根据 ViewModel 的某个属性值的 true,false 来设置 DOM 元 ...

  6. 不小心踩到的XMAPP的N种问题

    1.在win10上的xampp集成环境中安装mongo扩展 按照网上搜索的下载对应文件后,在phpinfo里面还是找不到mongo的扩展信息,后面也是请教同事帮忙解决: http://www.theg ...

  7. java面试题(杨晓峰)---第一讲谈谈你对java平台的理解

    本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK ...

  8. Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available

    java.lang.IllegalStateException: Failed to load ApplicationContext    at org.springframework.test.co ...

  9. BZOJ 3992: [SDOI2015]序列统计 NTT+快速幂

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1155  Solved: 532[Submit][Statu ...

  10. SAP CRM和C4C的客户主数据修改历史记录查询

    SAP CRM 随便修改一个字段,比如给Search Term维护值"webpack": Change History assignment block里显示出了这条修改记录: 根 ...