强连通分量题,用tarjin算法;

这是一道很简单的tarjin算法题,基本上就是套模板;

贴代码:

  1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. #include<stack>
  5. #define maxn 10005
  6. using namespace std;
  7. vector<int>ve[maxn];
  8. int dfn[maxn],low[maxn],ans,n,m,nncount;
  9. bool instack[maxn],vis[maxn];
  10. stack<int>q;
  11. void tarjin(int x)
  12. {
  13. dfn[x]=low[x]=++nncount;
  14. vis[x]=,instack[x]=;
  15. q.push(x);
  16. int l=ve[x].size();
  17. for(int i=; i<l; i++)
  18. {
  19. int v=ve[x][i];
  20. if(!vis[v])
  21. {
  22. tarjin(v);
  23. low[x]=min(low[x],low[v]);
  24. }
  25. else if(instack[v])
  26. low[x]=min(low[x],dfn[v]);
  27. }
  28. if(low[x]==dfn[x])
  29. {
  30. ans++;
  31. int v;
  32. do
  33. {
  34. v=q.top();
  35. q.pop();
  36. instack[v]=;
  37. }
  38. while(v!=x);
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. int x,y;
  45. while(scanf("%d%d",&n,&m)&&(m+n))
  46. {
  47. for(int i=; i<=n; i++)
  48. {
  49. ve[i].clear();
  50. instack[i]=vis[i]=;
  51. }
  52. while(!q.empty()) q.pop();
  53. for(int i=; i<m; i++)
  54. {
  55. scanf("%d%d",&x,&y);
  56. ve[x].push_back(y);
  57. }
  58. nncount=ans=;
  59. for(int i=; i<=n; i++)
  60. if(!vis[i]) tarjin(i);
  61. if(ans==) puts("Yes");
  62. else puts("No");
  63. }
  64. return ;
  65. }

其实这道题还可以用并查集来做;

维护两个数组,一个找儿子,一个找爸爸就行;

我也是参考别人的代码写的;

不过挺不错的,好好学习了下!

  1. #include<cstdio>
  2. using namespace std;
  3. int f[],d[],n,m;
  4. int find1(int x)
  5. {
  6. if(x!=&&f[x]!=x)
  7. f[x]=find1(f[x]);
  8. return f[x];
  9. }
  10.  
  11. int find2(int x)
  12. {
  13. if(x!=&&d[x]!=x)
  14. d[x]=find2(d[x]);
  15. return d[x];
  16. }
  17.  
  18. void uni(int x,int y)
  19. {
  20. if(x>) f[x]=find1(y);
  21. if(y>) d[y]=find2(x);
  22. }
  23.  
  24. bool judge()
  25. {
  26. for(int i=; i<=n; i++)
  27. if(find1(i)!=||find2(i)!=)
  28. return ;
  29. return ;
  30. }
  31.  
  32. int main()
  33. {
  34. int x,y;
  35. while(scanf("%d%d",&n,&m)&&(n+m))
  36. {
  37. for(int i=; i<=n; i++)
  38. f[i]=i,d[i]=i;
  39. for(int i=; i<m; i++)
  40. {
  41. scanf("%d%d",&x,&y);
  42. uni(x,y);
  43. }
  44. if(judge()) puts("No");
  45. else puts("Yes");
  46. }
  47. return ;
  48. }

hdu 1269的更多相关文章

  1. HDU 1269 迷宫城堡(强连通)

    HDU 1269 迷宫城堡 pid=1269" target="_blank" style="">题目链接 题意:中文题 思路:强连通模板题 代 ...

  2. HDU 1269 迷宫城堡 (Kosaraju)

    题目链接:HDU 1269 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000), ...

  3. Hdu 1269 强连通判定

    题目链接 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  4. 连通图模板(HDU 1269)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 题目大意:给定一个图,判断该图是否是强连通图.(强连通图为从任意一点出发,可到达其他所有点).深搜的Tar ...

  5. HDU 1269:迷宫城堡(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:确定是否是一个强连通图. 思路:裸的tarjan算法. #include <cstdio> ...

  6. hdu 1269 迷宫城堡

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...

  7. hdu - 1269 迷宫城堡 (强连通裸题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 判断一个图是不是强连通,缩点之后判断顶点数是不是为1即可. #include <iostream&g ...

  8. hdu 1269 迷宫城堡(trajan判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:略 题解:trajan模版直接求强连通分量. #include <iostream& ...

  9. hdu 1269 迷宫城堡 强连通分量

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

  10. HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)

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

随机推荐

  1. 关于ProgressBar的美化问题

    Android自带的ProgressBar其实也算不上丑陋,但是如果所有的App都使用一个模式的ProgressBar,那么估计用户就要崩溃了,打开任何一个App,擦,进度条都一模一样..有鉴于此,我 ...

  2. oracle学习----特殊的连接方式

    1.笛卡儿积 merge join cartesion SQL> select ename,dname from emp,dept; 已选择56行. 执行计划------------------ ...

  3. Java基础知识强化之IO流笔记40:字符流缓冲流之特殊功能 [ newLine() / readLine() ]

    1. 字符缓冲流的特殊方法 BufferedWriter: public void newLine():根据系统来决定换行符 BufferedReader: public String readLin ...

  4. last_9t's_ramsey

    cannot finish his face

  5. Scala函数字面量

    Scala中函数为头等公民,你不仅可以定义一个函数然后调用它,而且你可以写一个未命名的函数字面量,然后可以把它当成一个值传递到其它函数或是赋值给其它变量.下面的例子为一个简单的函数字面量(参考整数字面 ...

  6. 盘点 Github 所用到的开源项目

    http://www.php100.com/html/it/mobile/2014/0401/6736.html 在致力于开源事业的同时,Github也使用一些非常优秀的开源项目的来打造自己的平台与服 ...

  7. .Net之美读书系列(一):委托与事件

    开启新的读书之旅,这次读的书为<.Net之美:.Net关键技术深入解析>. 我是选择性阅读的,把一些自己觉得容易忘记的,或者比较重要的知识点记录下来,以便以后能方便呢查阅. 尊重书本原作者 ...

  8. web services 接口测试方法

    public class Test { public static void main(String[] args) { JaxWsProxyFactoryBean factory = new Jax ...

  9. JDBC——数据层DAO

    DAO:Data Access Object DAO 数据层 Service 逻辑业务层 View  视图层 entity   实体层 实现增.删.改.查的数据层 public class EmpDA ...

  10. Codevs 3990 中国余数定理 2

    3990 中国余数定理 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 传送门 题目描述 Description Skytree神犇最近在研究中国博大精深的数学. ...