為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間(n<=10000)和m條通道(m<=100000),每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩個房間都是相互連通的,即:對於任意的i和j,至少存在一條路徑可以從房間i到房間j,也存在一條路徑可以從房間j到房間i。
輸入包含多組資料,輸入的第一行有兩個數:n和m,接下來的m行每行有兩個數a和b,表示了一條通道可以從a房間來到b房間。檔案最後以兩個0結束。
對於輸入的每組資料,如果任意兩個房間都是相互連線的,輸出"yes",否則輸出"no"。
3 31 22 3
3 13 3
1 22 3
3 20 0
yesno
以任何乙個點為根正負邊各自建乙個圖,然後遍歷記錄即可。
#includeint f[10001][300],z[10001][300];
int ff[10001],zz[10001];
int ss1(int x)
return 0;
}int ss2(int x)
return 0;
}int main()
for (i=1;i<=m;i++)
ff[1]=0; zz[1]=0;
ss1(1); ss2(1);
for (w=0,i=1;i<=n;i++) if (ff[i]||zz[i]) w=1;
if (w==0) printf("yes\n"); else printf("no\n");
} return 0;
}
用vector更加簡便。
#include#include#include#includeusing namespace std;
vectorf[2][10005];
int c[10005];
void dfs(int x,int u)
else if (ins[j]) low[x] = min(dfn[j], low[x]);
} if (dfn[x] == low[x])
while (j != x); }}
int main()
memset(dfn, 0, sizeof(dfn));
memset(fa, 0, sizeof(fa));
memset(ins, 0, sizeof(ins));
tot = t = 0; dfs(1);
for (int i = ff = 1; i <= n; i++) if (fa[i] != fa[1])
if (ff) printf("yes\n"); else printf("no\n");
} return 0;
}
還可以這樣寫
#include#include#include#include#include#includeusing namespace std;
const int maxn = 10005;
int t, tot, n, m, x, y, dfn[maxn], low[maxn], ins[maxn];
vectortree[maxn];
stackp;
void dfs(int x)
while (j != y);
}} else low[x] = min(dfn[y], low[x]); }}
int main()
memset(ins, 0, sizeof(ins));
tot = t = 0; dfs(1);
for (int i = 1; i <= n; i++) if (!ins[i]) t++;
if (!t) printf("yes\n"); else printf("no\n");
} return 0;
}
HDU 1269 迷宮城堡
強連通分量,這題幾乎沒有除錯就ac了。第一次寫tarjan,真順利,其實可以再優化的,只要求出兩個以上的強連通分量就可以直接輸出no了,而不用再繼續算下去 include include include include include include include includeusing nam...
hdu 1269 迷宮城堡
根據題意,容易看出,這道題就是要求判斷該圖是否強連通,即只有乙個強連通分量,這樣的話,我們直接對圖運用tarjan演算法,求出圖中強連通分量的個數,只有乙個強連通分量就說明該圖強連通,否則該圖不強連通。這道題算是tarjan 的模板題 include include include include ...
HDU 1269 迷宮城堡
題目傳送門 題目為中文題,題意不再贅述。思路 題目中最後一句話為突破口,對於任意的i和j,至少存在一條路徑可以從房間i到房間j,也存在一條路徑可以從房間j到房間i。說明該圖為強連通圖,判斷該圖中是否只有乙個強連通分量即可。模板題 下面放 此處用tarjan演算法寫的 include include ...