题意:判断给定有向图中是否所有点都能够互相到达。

就是询问是否只有一个强连通分量。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stack>
  4. #include<queue>
  5. using namespace std;
  6.  
  7. const int maxn=1e4+;
  8. const int maxm=1e5+;
  9.  
  10. int head[maxn],point[maxm],nxt[maxm],size;
  11. int n,t,scccnt;
  12. int stx[maxn],low[maxn],scc[maxn];
  13. stack<int>S;
  14.  
  15. void init(){
  16. memset(head,-,sizeof(head));
  17. size=;
  18. }
  19.  
  20. void add(int a,int b){
  21. point[size]=b;
  22. nxt[size]=head[a];
  23. head[a]=size++;
  24. }
  25.  
  26. void dfs(int s){
  27. stx[s]=low[s]=++t;
  28. S.push(s);
  29. for(int i=head[s];~i;i=nxt[i]){
  30. int j=point[i];
  31. if(!stx[j]){
  32. dfs(j);
  33. low[s]=min(low[s],low[j]);
  34. }
  35. else if(!scc[j]){
  36. low[s]=min(low[s],stx[j]);
  37. }
  38. }
  39. if(low[s]==stx[s]){
  40. scccnt++;
  41. while(){
  42. int u=S.top();S.pop();
  43. scc[u]=scccnt;
  44. if(s==u)break;
  45. }
  46. }
  47. }
  48.  
  49. void setscc(){
  50. memset(stx,,sizeof(stx));
  51. memset(scc,,sizeof(scc));
  52. t=scccnt=;
  53. for(int i=;i<=n;++i)if(!stx[i])dfs(i);
  54. }
  55.  
  56. int main(){
  57. int m;
  58. while(scanf("%d%d",&n,&m)!=EOF&&n+m){
  59. init();
  60. while(m--){
  61. int a,b;
  62. scanf("%d%d",&a,&b);
  63. add(a,b);
  64. }
  65. setscc();
  66. if(scccnt==)printf("Yes\n");
  67. else printf("No\n");
  68. }
  69. return ;
  70. }

hdu1269 强连通的更多相关文章

  1. hdu1269强连通分量入门题

    https://vjudge.net/contest/156688#problem 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<= ...

  2. hdu1269(有向图强连通分量)

    hdu1269 题意 判断对于任意两点是否都可以互相到达(判断有向图强连通分量个数是否为 1 ). 分析 Tarjan 算法实现. code #include<bits/stdc++.h> ...

  3. tarjan算法强连通分量的正确性解释+错误更新方法的解释!!!+hdu1269

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 以下内容为原创,转载请声明. 强连通分量SCC(Strongly Connected Compo ...

  4. HDU1269 迷宫城堡(裸强连通分量)

    Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A ...

  5. hdu1269 有向图强连通 【Tarjan】(模板)

    <题目链接> 题目大意: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称 ...

  6. hdu1269迷宫城堡 (强连通Tarjan+邻接表)

    Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说 ...

  7. HDU1269 迷宫城堡 —— 强连通分量

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    M ...

  8. HDU1269 有向图强连通分量

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

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

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

随机推荐

  1. POJ 2559 Program C

    Submit Status Practice POJ 2559 Description A histogram is a polygon composed of a sequence of recta ...

  2. 响应式架构:消息模式Actor实现与Scala、Akka应用集成

    这是一本最近很流行的书. 有时间就去看看

  3. Oracle Database 11g express edition

    commands : show sys connect sys as sysdba or connect system as sysdba logout or disc clear screen or ...

  4. dhtmlxScheduler日历日程控件包括天视图,周视图,月视图,年视图和日程表视图

    dhtmlxScheduler 是一个基于Web的类似于Outlook的日历日程控件. 它完全由javascript/js/css编写, 提供类似于MS Outlook Calendar, Apple ...

  5. C++,1....n中随机等概率的输出m个不重复的数(假设n远大于m)。

    #include <stdlib.h> #include <time.h> knuth(int n, int m) { srand((unsigned )); ; i < ...

  6. SQL Server CONVERT() 函数(转)

    定义和用法 CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() 函数可以用不同的格式显示日期/时间数据. 语法 CONVERT(data_type(length),dat ...

  7. MySQL校对规则(三)

    校对规则:在当前编码下,字符之间的比较顺序是什么? ci:不区分大小写,Cs区分大小写, _bin 编码比较 每个字符集都支持不定数量的校对规则,可以通过如下指令: show collation 可以 ...

  8. JS中阻止默认事件与事件冒泡

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...

  9. WebService的原理和过程

    转自:http://blog.csdn.net/xiaoqiang081387/article/details/5694304 (一).XML WebService作用  XML WebService ...

  10. C# 展开和折叠代码的快捷键(总结)

    C# 展开和折叠代码的快捷键 VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M +  ...