生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯之小明判断环
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小明的實驗室有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
輸入保證合法。
輸出
按從小到大的順序輸出在環路上的電腦的編號,中間由一個空格分隔。
樣例輸入
5
1 2
3 1
2 4
2 5
5 3
樣例輸出
1 2 3 5
思路:很水的一個題目了。直接判斷環上面的節點,拓撲排序。
代碼如下:
#include
<bits
/stdc
++.h
>
#define ll
long long
using namespace std
;const int maxx
=1e5+100;
int deg
[maxx
];
vector
<int> p
[maxx
];
int n
;int main()
{scanf("%d",&n
);int x
,y
;memset(deg
,0,sizeof(deg
));for(int i
=1;i
<=n
;i
++){scanf("%d%d",&x
,&y
);deg
[x
]++,deg
[y
]++;p
[x
].push_back(y
);p
[y
].push_back(x
);}queue
<int> q
;for(int i
=1;i
<=n
;i
++) if(deg
[i
]==1) q
.push(i
);while(q
.size()){int u
=q
.front();q
.pop();deg
[u
]=-1;for(int i
=0;i
<p
[u
].size();i
++){deg
[p
[u
][i
]]--;if(deg
[p
[u
][i
]]==1) q
.push(p
[u
][i
]);}}for(int i
=1;i
<=n
;i
++) if(deg
[i
]>0) cout
<<i
<<" ";cout
<<endl
;
}
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的蓝桥杯之小明判断环的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。