zoukankan      html  css  js  c++  java
  • hdu 1269(tarjan)

    简单tarjan算法。 

    tarjan算法其实就是先找出一个强连通分量树的根,然后就很容易就可以找到整个强连通分量, 关键是利用dfs树

    迷宫城堡

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 4584    Accepted Submission(s): 2002


    Problem Description
    为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。
     
    Input
    输入包含多组数据,输入的第一行有两个数:N和M,接下来的M行每行有两个数a和b,表示了一条通道可以从A房间来到B房间。文件最后以两个0结束。
     
    Output
    对于输入的每组数据,如果任意两个房间都是相互连接的,输出"Yes",否则输出"No"。
     
    Sample Input
    3 3 1 2 2 3 3 1 3 3 1 2 2 3 3 2 0 0
     
    Sample Output
    Yes No
     
    Author
    Gardon
     
    Source
     
    Recommend
    lxj
     

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    #define N 10010

    int n,m;
    struct node
    {
    int to,next;
    }edge[100100];

    int cnt,pre[N];
    int mark[N];
    int low[N],vis[N];
    int stack[N];
    int top;
    int num;
    void add_edge(int u,int v)
    {
    edge[cnt].to=v;
    edge[cnt].next=pre[u];
    pre[u]=cnt++;
    }

    void dfs(int s,int cnt)
    {
    low[s]=cnt;
    vis[s]=cnt;
    mark[s]=1;
    stack[++top]=s;
    for(int p=pre[s];p!=-1;p=edge[p].next)
    {
    int v=edge[p].to;
    if(mark[v]==0) dfs(v,cnt+1);
    if(mark[v]==1) low[s]=min(low[v],low[s]);
    }
    if( low[s]==vis[s] )
    {
    num++;
    do
    {
    mark[ stack[top] ] = -1;
    } while(stack[top--]!=s);
    }
    }


    int main()
    {
    while(scanf("%d%d",&n,&m)&&(n+m))
    {
    cnt=0;
    memset(pre,-1,sizeof(pre));
    memset(mark,0,sizeof(mark));
    num=0;
    top=0;
    for(int i=0;i<m;i++)
    {
    int x,y;
    scanf("%d%d",&x,&y);
    add_edge(x,y);
    }
    for(int i=1;i<=n;i++)
    {
    if(mark[i]==0) dfs(i,0);
    }
    if(num==1) printf("Yes\n");
    else printf("No\n");
    }
    return 0;
    }

  • 相关阅读:
    如何弹出QQ临时对话框实现不添加好友在线交谈效果
    让sublime text3支持Vue语法高亮显示[转]
    spa(单页面应用)的优缺点[转]
    vue-devtoools 调试工具安装
    元素视差方向移动jQuery插件-类似github 404页面效果
    js删除数组元素、清空数组的简单方法
    sublime text3 setting-user
    vue环境搭建
    Starting httpd:Could not reliably determine the server's fully qualified domain name
    使用传输表空间迁移数据
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/3068273.html
Copyright © 2011-2022 走看看