๐ค๋ฌธ์ ์ดํด
์ ๋ถ์ ๊ธ๋ค๊ฐ ์ฌ์ดํด์ด ๋ฐ์ํ๋ ์ง์ ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์ ์ ์์น๋ฅผ ์ ํํ ๋ชฐ๋ผ๋ ์ ๋ถ์ผ๋ก ์ด์ด์ ธ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
๐ฅํ์ด๐ฅ
Find-Union ๋ฌธ์ ๋ก ๋ ์ ์ ์ด์ด์ค ๋๋ง๋ค ๊ทธ ์ ๋ค์ ์งํฉ์ ๋ฒํธ๋ฅผ ๊ฐฑ์ ํด์ค๋ค.
๊ทธ๋ฌ๋ค๊ฐ ์ด๋ค ๋ ์ ์ ์ด์ ๋ ํ ์ ์ ์งํฉ๊ณผ ๋ค๋ฅธ ํ ์ ์ ์งํฉ์ ๋ฒํธ๊ฐ ๊ฐ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์ด๋ ํ ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ํ์์ ๋ ์ ๋ถ์ ๊ทธ์ด์ฃผ๋ ๊ฒ ์ฆ, ์ฌ์ดํด์ด ์๊ธฐ๋ ๊ฒ์ด๋ฏ๋ก ๊ทธ ๋์ ์ฐจ๋ก ๋ฒํธ๋ฅผ ans ๋ณ์์ ์ ์ฅํด๋๋ค.
m๋ฒ๊น์ง์ ์ฐจ๋ก๋ ๋ชจ๋ ์ ๋ ฅ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ flag๋ฅผ ํตํด ans๋ฅผ ๊ตฌํ ๊ฒฝ์ฐ์ ๋ ์ ์ ์ ๋ ฅ๋ฐ๊ธฐ๋ง ํ๊ณ ์ด์ธ์ ์ฐ์ฐ์ ํ์ง ์๋๋ค.
๋ง์ง๋ง์ผ๋ก ans๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
#include <iostream>
using namespace std;
int n, m, x, y;
int par[500002];
int ans;
int Find(int a) {
if (par[a] == a)
return a;
return par[a] = Find(par[a]);
}
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 0; i < n; i++) {
par[i] = i;
}
int flag = 1;
for (int i = 0; i < m; i++) {
cin >> x >> y;
if (flag) {
int par_x = Find(x);
int par_y = Find(y);
if (par_x == par_y) {
ans = i + 1;
flag = 0;
} else {
par[par_y] = par_x;
}
}
}
cout << ans;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 11656๋ฒ ์ ๋ฏธ์ฌ ๋ฐฐ์ด (0) | 2022.11.14 |
---|---|
[๋ฐฑ์ค/C++] 17396๋ฒ ๋ฐฑ๋์ด (0) | 2022.11.11 |
[๋ฐฑ์ค/C++] 17404๋ฒ RGB๊ฑฐ๋ฆฌ 2 (0) | 2022.11.02 |
[๋ฐฑ์ค/C++] 4889๋ฒ ์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.10.27 |
[๋ฐฑ์ค/C++] 21610๋ฒ ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.10.06 |