試題 歷屆試題 發現環
資源限制
時間限制:1.0s 記憶體限制:256.0mb
問題描述
小明的實驗室有n臺電腦,編號1~n。原本這n臺電腦之間有n-1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。
不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加了一條資料鏈結,於是網路**現了環路。環路上的電腦由於兩兩之間不再是只有一條路徑,使得這些電腦上的資料傳輸出現了bug。
為了恢復正常傳輸。小明需要找到所有在環路上的電腦,你能幫助他嗎?
輸入格式
第一行包含乙個整數n。
以下n行每行兩個整數a和b,表示a和b之間有一條資料鏈結相連。
對於30%的資料,1 <= n <= 1000
對於100%的資料, 1 <= n <= 100000, 1 <= a, b <= n
輸入保證合法。
輸出格式
按從小到大的順序輸出在環路上的電腦的編號,中間由乙個空格分隔。
樣例輸入
51 2
3 12 4
2 55 3
樣例輸出
1 2 3 5
#pragma warning(disable:4996)
#include
"iostream"
#include
"functional"
#include
"algorithm"
#include
"cstring"
#include
"stack"
#include
"cmath"
#include
"queue"
#include
"vector"
#include
"map"
typedef
long
long
int ll;
using
namespace std;
vector<
int> ak[
100009
],ans;
ll father[
100009];
ll rank[
100009];
ll sta=
0,end=0;
void
addedge
(ll a,ll b)
ll find
(ll a)
}bool
link
(ll a,ll b)
else
return1;
}bool vis[
100009];
ll mem[
100009];
ll dfs
(ll k)
}return0;
}int
main()
addedge
(c,d);}
dfs(sta)
;for
(int i=end;i!=sta;i=mem[i]
) ans.
push_back
(sta)
;sort
(ans.
begin()
,ans.
end())
;for
(int i=
0;isize()
;i++
)}
藍橋杯 發現環(並查集 DFS)
問題描述 小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加了一條資料鏈結,於是網路 現了環路。環路上的電腦由於兩兩之間不再是只有一條路徑,使...
發現環 (藍橋運用了並查集和DFS)
題解 運用並查集首先找出兩個在環上的頂點 當兩個頂點已經的father已經相等但是又再次出現就說明這兩個頂點在環上 分別作為dfs的起點和終點。問題描述 小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連...
第八屆藍橋杯決賽發現環 並查集 DFS
小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加了一條資料鏈結,於是網路中出現了環路。環路上的電腦由於兩兩之間不再是只有一條路徑,使得這些電...