题意:
      给你一个有向图,然后问你有多少个满足要求的点,要求是: 这个点能走到的所有点都能走回这个点,找到所有的这样的点,然后排序输出。

思路:

      可以直接一遍强连通缩点,所点之后出度为0的强连通点中所包含的点都是满足要求的,比较容易理解,在强连通里,所有点都能走回来,同时只要强连通所点后没有出度,那么就能保证里面的每个点到所有连接自己连接的点后都能走回来,还有就是这个题目我数组开到快 80000000了,还没MLE,这个我就不说什么了。


#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>#define N_node 5001
#define N_edge 5000 * 5000 + 1using namespace std;typedef struct
{int to ,next;
}STAR;typedef struct
{int a ,b;
}EDGE;EDGE edge[N_edge];
STAR E1[N_edge] ,E2[N_edge];
int list1[N_node] ,list2[N_node] ,tot;
int Belong[N_node] ,Cnt;
int mark[N_node] ,Ans[N_node];
stack<int>sk;void add(int a ,int b)
{E1[++tot].to = b;E1[tot].next = list1[a];list1[a] = tot;E2[tot].to = a;E2[tot].next = list2[b];list2[b] = tot;
}void DFS1(int x)
{mark[x] = 1;for(int k = list1[x] ;k ;k = E1[k].next){int to = E1[k].to;if(mark[to]) continue;DFS1(to);}sk.push(x);
}void DFS2(int x)
{mark[x] = 1;Belong[x] = Cnt;for(int k = list2[x] ;k ;k = E2[k].next){int to = E2[k].to;if(mark[to]) continue;DFS2(to);}
}int main ()
{int n ,m ,i ,a ,b;while(~scanf("%d" ,&n) && n){scanf("%d" ,&m);memset(list1 ,0 ,sizeof(list1));memset(list2 ,0 ,sizeof(list2));tot = 1;for(i = 1 ;i <= m ;i ++){scanf("%d %d" ,&a ,&b);edge[i].a = a ,edge[i].b = b;add(a ,b);}memset(mark ,0 ,sizeof(mark));while(!sk.empty()) sk.pop();for(i = 1 ;i <= n ;i ++)if(!mark[i]) DFS1(i);memset(mark ,0 ,sizeof(mark));Cnt = 0;while(!sk.empty()){int xin = sk.top();sk.pop();if(mark[xin]) continue;Cnt ++;DFS2(xin);}memset(mark ,0 ,sizeof(mark));for(i = 1 ;i <= m ;i ++){a = Belong[edge[i].a];b = Belong[edge[i].b];if(a == b) continue;mark[a] ++;}int nowid = 0;for(i = 1 ;i <= n ;i ++)if(!mark[Belong[i]]) Ans[++nowid] = i;sort(Ans + 1 ,Ans + nowid + 1);for(i = 1 ;i <= nowid ;i ++)if(i == nowid) printf("%d\n" ,Ans[i]);else printf("%d " ,Ans[i]);}return 0;
}

POJ2553 强连通出度为0的应用相关推荐

  1. poj2553(强连通分量)

    题意:给出有向图,图的底部是所有汇节点的子集,即,底部(G)={v∈V\x-∀w∈V:(v→w)⇒(w→v)},w在--里面G可以从v, v也可从w.让我们求有多少个点是绘点的问题. 思路:先求解出强 ...

  2. poj2186 求有向图G中所有点都能到达的点的数量

    /*题意:有向图,求这样的点的数量:所有点都能到达它.缩点成有向无环图,思:如果该强连通有出度,那么 从该出度出去的边必然回不来(已经缩点了),所以有出度的强连通必然不是.那么是不是所有出度为0的强连 ...

  3. 有向图——强连通分量

    有向图的强连通分量(strongly connected components) 在有向图G中,如果两个顶点vi,vj间(vi!=vj)有一条从vi到vj的路径,同时还有一条从vj到vi的路径(顶点相 ...

  4. 【C++】强连通分量

    强连通分量 先来一题例题 题目大意 怎么做? 分析 结论 不要高兴得太早 怎么办呢? 定义 缩点法 原图构建新图 发现 新的结论 强连通分量算法 Kosaraju算法 Tarjan算法 例题:信息传递 ...

  5. HDU - 2767 Proving Equivalences tanjar强连通-DAG性质

    传送门 很开心,wrong了十多发.因为不认真写错了一个字母,找了一个晚上的bug. 题意:给你一个单向图,问你加多少边能够变成一个强连通图,很显然首先是通过tanjar缩点将该图转化为了DAG,看了 ...

  6. HDU - 1269迷宫城堡 -强连通tanjar算法

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

  7. poj2186(强连通分量)

    思路:找出出度为0 的顶点,如果出度为0的顶点大于1,则解为零,否则解就是出度为零的顶点的连通分支数. 刚开始是没有理解这道题的,也是看了大神之后才理解的. 方法一: #include<iost ...

  8. HDU2767(强连通分量+Kosaraju算法)

    题意:需要加多少边才能把一个图变成强连通分量 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图. 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连 ...

  9. 【缩点】解题报告:luogu P2746 [USACO5.3]校园网Network of Schools(有向图、强连通分量、缩点)

    题目链接:P2746 [USACO5.3]校园网Network of Schools 用tarjan算法求出强连通分量,并且缩点,如果缩点后只有一个点,则答案为1,0 对于第一问,如果缩点后某一点的入 ...

最新文章

  1. 简单的Java双亲委派机制
  2. Geoffrey Hinton专访:如何解释神经网络的变迁
  3. chinese_L-12_H-768_A-12的一个坑
  4. 执行python文件报错SyntaxError: Non-ASCII character '\xe8' in file, but no encoding declared
  5. 双线macd指标参数最佳设置_常用指标知多少(二)
  6. [SDOI2014]旅行
  7. 一文追溯 ETL 的发展历程
  8. python网络编程编码和解码_python编程中的编码和解码问题
  9. linux防火墙桌面关闭端口,Linux关闭防火墙,开放端口
  10. python3 zip函数
  11. 《软件工程导论》期末复习知识点总结(全)
  12. 【 优秀的无干扰文本写作工具】Ommwriter for Mac 1.57
  13. 如何轻松回收您无法出售的旧电子产品
  14. 软件架构模式 mark Richards - 读后总结 2 事件驱动架构
  15. 自爆神舟电脑为什么便宜,明眼人可以看懂。
  16. 计算机设备管理器老是闪烁,Win7系统打开设备管理器后一直自动刷新解决方法...
  17. html5 o2o,基于HTML5的O2O团购平台的设计与实现
  18. 怎样才能成为一个优秀的产品经理
  19. Feign 请求动态URL
  20. XDOJ 1-1 车牌限行

热门文章

  1. Gradle for Android 第三篇( 依赖管理 )
  2. 规范化的递归转换成非递归
  3. .net Redis使用公共方法引用CSRedisCore
  4. 正方形分成16份,将1到16填入其中。让行和列都是从大到小。问一共有多少种方法?...
  5. export data by MS-SQL
  6. HihoCoder 1513 : 小Hi的烦恼
  7. Python学习之路-12 (递归)
  8. 阿里大鱼.net core 发送短信
  9. bestcoder #67 div2 1003 Black Jack 概率dp
  10. android之音乐播放和音效播放