為了訓練小希的方向感,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"。
題意很明顯 看看這個圖是不是每個點都能到每乙個點
即全連通
#include#include#include#include#include#define ll long long
using namespace std;
#define hengheng main()
#define mem(a,b) memset(a,b,sizeof(a))
const int maxx=1e5+10;
struct edgea[maxx];
int head[maxx];
int dfn[maxx]; // 時間戳
int low[maxx]; // 昨早到達的點
int scc[maxx]; // 屬於哪個連通
int top=0; // 堆疊 的頭
int sta[maxx]; // 堆疊陣列
int lay=0; // 順序
int cnt=0; // 鏈式前向星存圖的下標
int sig=0; // 連同編號;
void chushihua()// 初始化而已d
void addedge(int u,int v) // 存圖
void dfs(int u)
else if(scc[t]==0) // 它還沒有連通 。如果有的話也就無需繼續走了
}if(dfn[u]==low[u]) // 它自己這段就是連通了
} }
int hengheng
for(int i=1;i<=n;i++) // 因為走某乙個點可能走不完全部的圖
if(sig==1) printf("yes\n");
else printf("no\n"); }
}
迷宮城堡 Tarjan
為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩...
迷宮城堡 Tarjan入門
傳送門 hdu 1269 為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你...
tarjan演算法 杭電迷宮城堡。
思路 這題運用到tarjan演算法 剛看這個演算法一臉蒙b,然後通過閱讀別人的部落格算是掌握的差不多了。這個演算法中用到兩個陣列第乙個dfn,low,第乙個陣列是用來記錄深搜的順序的,第二個陣列是用來儲存i節點能夠追溯到他這個強連通分量最先深搜到的那個節點。具體的看演算法有關鍵注釋。我這裡簡單說下這...