题意:

  给一个有向图,问添加几条边可以使其强连通。

思路:

  tarjan算法求强连通分量,然后缩点求各个强连通分量的出入度,答案是max(入度为0的缩点个数,出度为0的缩点个数)。

  1. #include <bits/stdc++.h>
  2. #define LL long long
  3. #define pii pair<int,int>
  4. using namespace std;
  5. const int N=+;
  6. const int INF=0x7f7f7f7f;
  7.  
  8. vector<int> vect[N];
  9. stack<int> stac;
  10. bool chu[N], ru[N];
  11. int scc_no[N], lowlink[N], dfn[N];
  12. int dfn_clock, scc_cnt;
  13. int n, m;
  14.  
  15. void DFS(int x)
  16. {
  17. stac.push(x);
  18. dfn[x]=lowlink[x]=++dfn_clock;
  19. for(int i=; i<vect[x].size(); i++)
  20. {
  21. int t=vect[x][i];
  22. if(!dfn[t])
  23. {
  24. DFS(t);
  25. lowlink[x]=min(lowlink[x],lowlink[t]);
  26. }
  27. else if(!scc_no[t]) //如果t不属于任何一个强连通分量
  28. lowlink[x]=min(lowlink[x],dfn[t]);
  29. }
  30. if(lowlink[x]==dfn[x])
  31. {
  32. scc_cnt++;
  33. while(true)
  34. {
  35. int t=stac.top();
  36. stac.pop();
  37. scc_no[t]=scc_cnt;
  38. if(t==x) break;
  39. }
  40. }
  41. }
  42.  
  43. int cal()
  44. {
  45. memset(dfn,,sizeof(dfn));
  46. memset(lowlink,,sizeof(lowlink));
  47. memset(scc_no,,sizeof(scc_no));
  48.  
  49. dfn_clock=scc_cnt=;
  50. for(int i=; i<=n; i++) if(!dfn[i]) DFS(i); //深搜
  51. if(scc_cnt==) return -;
  52.  
  53. memset(chu,,sizeof(chu));
  54. memset(ru,,sizeof(ru));
  55. for(int i=; i<=n; i++)
  56. for(int j=; j<vect[i].size(); j++) //统计出入度
  57. if(scc_no[i]!=scc_no[vect[i][j]]) chu[scc_no[i]]=ru[scc_no[vect[i][j]]]=true;//这里麻烦了点,小心点出错
  58.  
  59. int c=, r=;
  60. for(int i=; i<=scc_cnt; i++)
  61. {
  62. if(!chu[i]) c++;
  63. if(!ru[i]) r++;
  64. }
  65. return max(c,r)-;
  66. }
  67.  
  68. int main()
  69. {
  70. freopen("input.txt", "r", stdin);
  71. int a, b, t;
  72. cin>>t;
  73. while(t--)
  74. {
  75. scanf("%d%d",&n,&m);
  76. for(int i=; i<=n; i++) vect[i].clear();
  77. for(int i=; i<m; i++)
  78. {
  79. scanf("%d%d", &a, &b);
  80. vect[a].push_back(b);
  81. }
  82. printf("%d\n",cal());
  83. }
  84. return ;
  85. }

AC代码

UVALive Proving Equivalences (强连通分量,常规)的更多相关文章

  1. 训练指南 UVALive - 4287 (强连通分量+缩点)

    layout: post title: 训练指南 UVALive - 4287 (强连通分量+缩点) author: "luowentaoaa" catalog: true mat ...

  2. Proving Equivalences UVALive - 4287(强连通分量 水题)

    就是统计入度为0 的点 和 出度为0 的点  输出 大的那一个,, 若图中只有一个强连通分量 则输出0即可 和https://www.cnblogs.com/WTSRUVF/p/9301096.htm ...

  3. HDU2767Proving Equivalences[强连通分量 缩点]

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. hdu2767 Proving Equivalences --- 强连通

    给一个图,问至少加入�多少条有向边能够使图变成强连通的. 原图是有环的,缩点建图,在该DAG图上我们能够发现,要使该图变成强连通图必须连成环 而加入�最少的边连成环,就是把图上入度为0和出度为0的点连 ...

  5. hdu - 2667 Proving Equivalences(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=2767 求至少添加多少条边才能变成强连通分量.统计入度为0的点和出度为0的点,取最大值即可. #include & ...

  6. UvaLive 4287 Proving Equivalences 强连通缩点

    原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  7. hdu 2767 Proving Equivalences 强连通缩点

    给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...

  8. HDU 2767:Proving Equivalences(强连通)

    题意: 一个有向图,问最少加几条边,能让它强连通 方法: 1:tarjan 缩点 2:采用如下构造法: 缩点后的图找到所有头结点和尾结点,那么,可以这么构造:把所有的尾结点连一条边到头结点,就必然可以 ...

  9. HDU 2767 Proving Equivalences(强连通 Tarjan+缩点)

    Consider the following exercise, found in a generic linear algebra textbook. Let A be an n × n matri ...

随机推荐

  1. 别让emacs损伤你的小母指

    刚接触emacs时感觉,这东西怎么这么难用,还说是编辑器的神,我去. 写个代码跟挫游戏机手柄似的,关键是还这么难挫,平时用的最多的左ctrl键,这么难按,可怜的我的小母指(Petyr Baelish) ...

  2. 《WPF程序设计指南》读书笔记——第4章 按钮与其他控件

    1.Button类 using System; using System.Windows; using System.Windows.Media; using System.Windows.Input ...

  3. 【转】 GDB 常用调试方法

    一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break ...

  4. 软件测试 -- 软件缺陷记录的5C原则

    Correct(准确):每个组成部分的描述准确,不会引起误解: Clear(清晰):每个组成部分的描述清晰,易于理解: Concise(简洁):只包含必不可少的信息,不包括任何多余的内容: Compl ...

  5. 读书笔记汇总 --- 用Python写网络爬虫

    本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...

  6. Xcode常用快捷键及代码格式刷(缩进)方法-b

    Xcode版本:4.5.1 一.总结的常用命令: 隐藏xcode command+h 退出xcode command+q 关闭窗口 command+w 关闭所有窗口 command+option+w ...

  7. 你所不知道的ref

    在c#中有个关键字叫ref,它的作用是使参数按引用传递,基本用法如下: class RefExample { static void Method(ref int i) { i = ; } stati ...

  8. CSS 命名规范及标题供参考与学习

    一.CSS 命名规范   XHTML-CSS写作建议 所有的xhtml代码小写 属性的值一定要用双引号("")括起来,且一定要有值 每个标签都要有开始和结束,且要有正确的层次 空元 ...

  9. PAT-乙级-1032. 挖掘机技术哪家强(20)

    1032. 挖掘机技术哪家强(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 为了用事实说明挖掘机技术到底 ...

  10. HZNU1015: 矩阵排序

    http://acm.hznu.edu.cn/JudgeOnline/problem.php?id=1015 题意:把矩阵每一行都排序. (以前觉得很难的题目回头看看原来如此简单 ][]; ; i&l ...