题意:

  问至少加几条边 能使点s可以到达所有的点

解析:

  无向图的连通分量意义就是  在这个连通分量里 没两个点之间至少有一条可以相互到达的路径

  所以 我们符合这种关系的点放在一起, 由s向这些点的任意一个连边即可

  即为求除s所在的连通分量以外的  入度为0的连通分量

  

  1. #include <bits/stdc++.h>
  2. #define mem(a, b) memset(a, b, sizeof(a))
  3. #define rap(i, a, n) for(int i=a; i<=n; i++)
  4. #define rep(i, a, n) for(int i=a; i<n; i++)
  5. #define lap(i, a, n) for(int i=n; i>=a; i--)
  6. #define lep(i, a, n) for(int i=n; i>a; i--)
  7. #define rd(a) scanf("%d", &a)
  8. #define rlld(a) scanf("%lld", &a)
  9. #define rc(a) scanf("%c", &a)
  10. #define rs(a) scanf("%s", a)
  11. #define pd(a) printf("%d\n", a);
  12. #define plld(a) printf("%lld\n", a);
  13. #define pc(a) printf("%c\n", a);
  14. #define ps(a) printf("%s\n", a);
  15. #define MOD 2018
  16. #define LL long long
  17. #define ULL unsigned long long
  18. using namespace std;
  19. const int maxn = , INF = 0x7fffffff;
  20. vector<int> G[maxn];
  21. int pre[maxn], lowlink[maxn], sccno[maxn], dfs_clock, scc_cnt;
  22. int in[maxn];
  23. stack<int> S;
  24. int n, m, s;
  25. void dfs(int u)
  26. {
  27. pre[u] = lowlink[u] = ++dfs_clock;
  28. S.push(u);
  29. for(int i=; i<G[u].size(); i++)
  30. {
  31. int v = G[u][i];
  32. if(!pre[v])
  33. {
  34. dfs(v);
  35. lowlink[u] = min(lowlink[u], lowlink[v]);
  36. }
  37. else if(!sccno[v])
  38. lowlink[u] = min(lowlink[u], pre[v]);
  39. }
  40. if(lowlink[u] == pre[u])
  41. {
  42. scc_cnt++;
  43. for(;;)
  44. {
  45. int x = S.top(); S.pop();
  46. sccno[x] = scc_cnt;
  47. if(x == u) break;
  48. }
  49. }
  50. }
  51. void init()
  52. {
  53. dfs_clock = scc_cnt = ;
  54. mem(sccno, );
  55. mem(pre, );
  56. }
  57.  
  58. int main()
  59. {
  60. init();
  61. int u, v;
  62. cin>> n >> m >> s;
  63. for(int i=; i<m; i++)
  64. {
  65. cin>> u >> v;
  66. G[u].push_back(v);
  67. }
  68. for(int i = ; i<=n; i++)
  69. if(!pre[i]) dfs(i);
  70. // cout<< scc_cnt <<endl;
  71. for(int i=; i<=n; i++)
  72. for(int j=; j<G[i].size(); j++)
  73. if(sccno[i] != sccno[G[i][j]])
  74. in[sccno[G[i][j]]]++;
  75. int cnt = ;
  76. if(in[sccno[s]] == )
  77. cnt--;
  78. for(int i=; i<=scc_cnt; i++)
  79. {
  80. if(in[i] == )
  81. cnt++;
  82. }
  83. cout<< cnt <<endl;
  84.  
  85. return ;
  86. }

Reachability from the Capital CodeForces - 999E(强连通分量 缩点 入度为0的点)的更多相关文章

  1. POJ2186 (强连通分量缩点后出度为0的分量内点个数)

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27820   Accepted: 11208 De ...

  2. Reachability from the Capital CodeForces - 999E (强连通)

    There are nn cities and mm roads in Berland. Each road connects a pair of cities. The roads in Berla ...

  3. HD2767Proving Equivalences(有向图强连通分量+缩点)

    题目链接 题意:有n个节点的图,现在给出了m个边,问最小加多少边是的图是强连通的 分析:首先找到强连通分量,然后把每一个强连通分量缩成一个点,然后就得到了一个DAG.接下来,设有a个节点(每个节点对应 ...

  4. 【poj2553】The Bottom of a Graph(强连通分量缩点)

    题目链接:http://poj.org/problem?id=2553 [题意] 给n个点m条边构成一幅图,求出所有的sink点并按顺序输出.sink点是指该点能到达的点反过来又能回到该点. [思路] ...

  5. Codeforces 950E Data Center Maintenance ( 思维 && 强连通分量缩点 )

    题意 : 给出 n 个点,每个点有一个维护时间 a[i].m 个条件,每个条件有2个点(x,y)且 a[x] != a[y].选择最少的 k (最少一个)个点,使其值加1后,m个条件仍成立. 分析 : ...

  6. POJ1236Network of Schools[强连通分量|缩点]

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16571   Accepted: 65 ...

  7. POJ1236Network of Schools(强连通分量 + 缩点)

    题目链接Network of Schools 参考斌神博客 强连通分量缩点求入度为0的个数和出度为0的分量个数 题目大意:N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后 ...

  8. UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)

    题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点. 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了. 那么问题就简单了, ...

  9. ZOJ3795 Grouping(强连通分量+缩点+记忆化搜索)

    题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通. 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组. 能在同一组 ...

随机推荐

  1. mysql事务,select for update,及数据的一致性处理

    在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读) 在SELECT 的读取锁定主要分为两种方式: SELECT ... ...

  2. jdbc获取blob类型乱码

    一.使用场景: mysql数据库字段类型为longblob,在数据库里看中文字符正常,java读取字串的时候发现中文乱码 使用到了activeMq 二.排查: (1)修改eclipse的环境编码为ut ...

  3. Hadoop开发第6期---HDFS的shell操作

    一.HDFS的shell命令简介 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等. ...

  4. MIT一牛人对数学在机器学习中的作用给的评述

    MIT一牛人对数学在机器学习中的作用给的评述 转载自http://my.oschina.net/feedao/blog/52252,不过这个链接也是转载的,出处已经无从考证了.   感觉数学似乎总是不 ...

  5. CS229笔记:生成学习算法

    在线性回归.逻辑回归.softmax回归中,学习的结果是\(p(y|x;\theta)\),也就是给定\(x\)的条件下,\(y\)的条件概率分布,给定一个新的输入\(x\),我们求出不同输出的概率, ...

  6. Codeforces 955C Sad powers (数论)

    题目链接:Sad powers 题意:给出n个l和r,求出每个给出的[l,r]之间的可以使是另外一个数的k次方的数.(k>=2) 题解:题目给出的数据范围最大是1E18所以如果要直接把所有的从1 ...

  7. (功能篇)回顾Bug管理系统Mantis优化改造经历

    共分为两篇,功能篇和技术篇. 时间大约是2016年冬天. 考虑搭一个用于Bug管理和追踪的系统. 综合比较下,选择了小巧的开源工具,Mantis. 在源码基础上,做代码修改,完成了定制版的优化改造. ...

  8. Selenium+Python自动化测试环境搭建和搭建过程遇到的问题解决

    环境搭建: 第一步:安装Python  网址:https://www.python.org/ 按照如图提示安装,并且配置环境变量(安装时候选中pip会自动安装Python的包管理工具 pip,推荐选择 ...

  9. A星寻路算法入门(Unity实现)

    最近简单学习了一下A星寻路算法,来记录一下.还是个萌新,如果写的不好,请谅解.Unity版本:2018.3.2f1 A星寻路算法是什么 游戏开发中往往有这样的需求,让玩家控制的角色自动寻路到目标地点, ...

  10. 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制

    11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字   image 设置GameMgr   image 11.2 游戏整体流程 下面Gam ...