HDOJ1269(迷宫城堡)
生活随笔
收集整理的這篇文章主要介紹了
HDOJ1269(迷宫城堡)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
迷宮城堡
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 746????Accepted Submission(s): 282
Problem Description 為了訓(xùn)練小希的方向感,Gardon建立了一座大城堡,里面有N個房間(N<=10000)和M條通道(M<=100000),每個通道都是單向的,就是說若稱某通道連通了A房間和B房間,只說明可以通過這個通道由A房間到達B房間,但并不說明通過它可以由B房間到達A房間。Gardon需要請你寫個程序確認一下是否任意兩個房間都是相互連通的,即:對于任意的i和j,至少存在一條路徑可以從房間i到房間j,也存在一條路徑可以從房間j到房間i。
Input 輸入包含多組數(shù)據(jù),輸入的第一行有兩個數(shù):N和M,接下來的M行每行有兩個數(shù)a和b,表示了一條通道可以從A房間來到B房間。文件最后以兩個0結(jié)束。
Output 對于輸入的每組數(shù)據(jù),如果任意兩個房間都是相互連接的,輸出"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;
}
轉(zhuǎn)載于:https://www.cnblogs.com/Xredman/archive/2009/05/04/1448701.html
總結(jié)
以上是生活随笔為你收集整理的HDOJ1269(迷宫城堡)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本地数据源:使用firebird数据库
- 下一篇: Apache+Tomcat+Mysql+