問題描述
小明的實驗室有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
思路:拓撲排序判斷有向圖時in[i]<=0時入隊,有向圖in[i]<=1時入隊,因為是雙向邊,下乙個點鄰接的點也有可能是上乙個點,因此我們每取乙個點排序就把這個點標記一下,當到標記的點直接到達即可。
#include#include#includeusing namespace std;
const int maxn=100009;
int head[100009],ans[100009],in[100009],book[100009],cnt;
struct nodeside[2*maxn];
void init()
void add(int x,int y)
int main()
priority_queue,greater> q;
for(int i=1;i<=n;i++)
if(in[i]==1)
q.push(i);
while(q.size()) }
int k=0;
for(int i=1;i<=n;i++)
if(in[i]>=2)
ans[k++]=i;
for(int i=0;iprintf("%d ",ans[i]);
printf("%d\n",ans[k-1]);
return 0;
}
發現環 藍橋杯
題目描述 小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加了一條資料鏈結,於是網路 現了環路。環路上的電腦由於兩兩之間不再是只有一條路徑,使...
藍橋杯 發現環
問題描述 小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加了一條資料鏈結,於是網路 現了環路 環路上的電腦由於兩兩之間不再是只有一條路徑,使...
藍橋 發現環 拓撲排序判環
小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加了一條資料鏈結,於是網路 現了環路。環路上的電腦由於兩兩之間不再是只有一條路徑,使得這些電腦...