๐ฆ20040: cycle_game
[์๊ณ ๋ฆฌ์ฆ ํ์ด] ๊ฐ๋๊ท
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-20
๋ฌธ์ ํ์ธํ๊ธฐ
ํ์ด
- ์ ๋ถ์ ๊ทธ๋ฆฌ๋ฉด์ ์ฌ์ดํด์ด ์๊ธฐ๋ ์๊ธฐ์ ์ฐจ๋ก๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
- Union Find ๋ฐฉ๋ฒ์ ํตํด์ ์ฐ๊ฒฐ์ด ์๋์ด ์๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ์์ผ์ฃผ๊ณ , ์ฐ๊ฒฐ์ด ๋์ด ์๋ ๊ฒฝ์ฐ์๋ ์ฌ์ดํด์ด ๋ง๋ค์ด์ง ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฒํธ๋ฅผ ์ถ๋ ฅํด์ค๋ค.
#include <iostream>
#define endl '\n'
using namespace std;
int N, M;
int parent[500001];
int res = 0;
void Input(){
cin >> N >> M;
}
int Find(int i){
if(parent[i]==i) return i;
else return parent[i] = Find(parent[i]);
}
int Union(int i, int j){
i = Find(i);
j = Find(j);
if(i==j) {
return 1;
}
else{
parent[i] = j;
return 0;
}
}
void Solution(){
for(int i=1; i<=N; i++){
parent[i]=i;
}
for(int i=1; i<=M; i++){
int a, b;
cin >> a >> b;
if(Union(a, b)){
res = i;
break;
}
}
if(res == 0) cout << 0 << endl;
else cout << res << endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
Input();
Solution();
return 0;
}