迷宫城堡

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

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

//2009-05-04 14:31:28 Accepted 1269 62MS 1976K 1508 B C++ Xredman 
#include <iostream>
#include <vector>
using namespace std;

const int N = 10002;

vector<int> xx[N];
vector<int> yy[N];
bool Visited[N];
int post[N], UFSet[N];
int n, m;
int cnt;

void dfs1(int y)
{

    Visited[y] = true;
    
    for(int i = 0;i < yy[y].size(); i++)
        if(!Visited[yy[y][i]])
            dfs1(yy[y][i]);
            
    post[cnt++] = y;
}

void dfs2(int x)
{

    Visited[x] = true;
    UFSet[x] = cnt;

    for(int i = 0; i < xx[x].size(); i++)
        if(!Visited[xx[x][i]])
            dfs2(xx[x][i]);
}

bool Kosaraju()
{
    int i;
    cnt = 0;
    for(i = 1; i <= n; i++)
        if(!Visited[i])
            dfs1(i);

    for(i = 1; i <= n; i++)
        Visited[i] = false;
    cnt = 1;

    for(i = n - 1; i >= 0; i--)
        if(!Visited[post[i]])
        {
            if(cnt == 2)
                return false;
            dfs2(post[i]);
            cnt++;
        }
    return true;
}


int main()
{
    int i;
    int x, y;
    while(scanf("%d%d", &n, &m)!= EOF)
    {
        if(n == 0 && m == 0)
            break;

        for(i = 1; i <= n; i++)
        {
            Visited[i] = false;
            xx[i].clear();
            yy[i].clear();
        }

        for(i = 0; i < m; i++)
        {//input , create a graph
            scanf("%d%d", &x, &y);
            xx[x].push_back(y);
            yy[y].push_back(x);
        }
        if(Kosaraju())
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/Xredman/archive/2009/05/04/1448701.html

HDOJ1269(迷宫城堡)相关推荐

  1. 【HDU 1269】迷宫城堡 (Tarjan算法)

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

  2. HDU1269 迷宫城堡(模板题)

    HDU1269 迷宫城堡 文章目录 Problem Description 题解: Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N< ...

  3. 【HDU - 1269】迷宫城堡 (tarjan算法模板)

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

  4. HDU 1269 迷宫城堡 -- 强连通图判断

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1269 图的强连通分量 http://baike.baidu.com/link?url=NqsmNsGC ...

  5. HDU 1269 迷宫城堡(强连通图的判定)

    最近<算法导论>快看完图论部分了,很多有关图的算法都彻底搞懂并加以证明了.现在主要是将理解的思想用到题目中来加强下.这个题目主要是判断一下整个图是否是强连通的,很简单,可以用tarjan也 ...

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

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

  7. Hdu 1269.迷宫城堡

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

  8. 迷宫城堡(HDU-1269)

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

  9. 迷宫城堡——Tarjan

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

最新文章

  1. 48 jQuery元素操作
  2. 【英文文本分类实战】之三——数据清洗
  3. STM32F4 HAL库开发 -- STM32F407引脚图
  4. 使用mocha进行测试 区块链
  5. mysql 中文乱码解决办法
  6. 异步线程AsyncTask_2示例(07)
  7. SCP-bzoj-1000
  8. jdbc驱动加载过程
  9. 通过ICE轻松部署WES7镜像
  10. 蓝鸽无盘服务器,蓝鸽英语学习平台为什么点击游客就能进去?
  11. Linux中出现 xxx is not in the sudoers file.This incident will be reported.
  12. java 查看对象内存占用大小
  13. Mac ps 2021 3D功能无法使用问题,怎么办?
  14. ZYNQ-Linux设备树驱动下的双DMA循环切换传输数据
  15. 如何直接用Tomcat启动项目
  16. 【题解】Luogu-P5303 [GXOI/GZOI2019]逼死强迫症
  17. 最新骗术,骗子的手段越来越高了(转贴)
  18. 计算机病毒的基本知识
  19. ARM存储器之:高速缓冲存储器Cache
  20. CSP之无线网络(最短路径)

热门文章

  1. NOIP2017大爆炸
  2. Python 爬虫1——爬虫简述
  3. 大数据时代 树大数据意识
  4. js高级编程中命名空间的两种用法
  5. *用C#创建Windows服务(Windows Services)
  6. bd3.2 Python高级
  7. Pig的安装和简单使用
  8. 【转载】linux 下 cpu使用情况分析
  9. sqlserver2008中如何用右键可视化的设置外键
  10. NSString 去掉前后空格或回车符