
๋ชฉ์ฐจ
0. ์๋ก
1. ๋ฌธ์ ๋ฐฉํฅ
2. ์ฝ๋
0. ์๋ก
๋ฌธ์
๋ฃจํธ ์๋ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋, ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ 1์ด๋ผ๊ณ ์ ํ์ ๋, ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ธ๋์ ๊ฐ์ N (2 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N-1๊ฐ์ ์ค์ ํธ๋ฆฌ ์์์ ์ฐ๊ฒฐ๋ ๋ ์ ์ ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N-1๊ฐ์ ์ค์ ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋ฒํธ๋ฅผ 2๋ฒ ๋ ธ๋๋ถํฐ ์์๋๋ก ์ถ๋ ฅํ๋ค.
๊น์ง๊ฐ ๋ฌธ์ ๋ค.
ํ์๊ฐ ํธ๋ ์์ ์์๋ ์ค๋ฒ2์๊ณ , ์ฒ์์ ๊ฐ๋ฅ์ ์๋ชป ์ง์ด ์กฐ๊ธ ํค๋ฉ์๋ค.
1. ๋ฌธ์ ๋ฐฉํฅ
ํ์์ ์๊ฐ ํ๋ฆ์ด ๊ถ๊ธํ์ง ์๋ค๋ฉด, ์๋์ ๊บพ์ด์ง๊ตฌ๋ถ์ ์๋๋ถํฐ ๋ณด๋ฉด ๋๋ค.
ํ์๋ ์ฒ์์ union find์ ๊ฒฝ๋ก์์ถ์ ๋ณํ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํ๊ณ ,
for(int i = 0; i < N-1; ++i) {
cin >> a >> b;
table[a].push_back(b);
table[b].push_back(a);
}
์ฒ๋ผ ์ ๋ ฅ ๋ฐ๊ณ , ํ๋ํ๋ ์ํํ๋ฉฐ vector์ ๋ถ๋ชจ๋ฅผ ์ฐพ์ ๋ฃ์๋ค.
์ฌ๊ท๋ฅผ ๋๋ฉด์ 1์ ๋ฐ๊ฒฌํ๋ฉด, ๊ทธ ๊ณผ์ ์์ ๋ฐ๊ฒฌํ ๋ฒํธ๋ค์ ์ด๋ฏธ ๋ถ๋ชจ๋ฅผ ์ฐพ์๊ณ , ๋ถ๋ชจ๋ฅผ ์ฐพ์ง ๋ชปํ ๋ค๋ฅธ ๋ ธ๋์์ ๋ถ๋ชจ๋ฅผ ์ฐพ์ ๋ ธ๋๋ฅผ ๋ฐ๊ฒฌํ๋ฉด, ๊ทธ ๊ณผ์ ์ 1๊ณผ ์ฐ๊ฒฐ๋์ด์๊ธฐ์ ๊ทธ๋ฅ ๋ถ๋ชจ๋ก ๊ฐ๋ค ๋ฃ์๋ค.
์ด๋ฌ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. N์ด ๋ฌด๋ ค 10๋ง๊ฐ๊น์ง ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฏ ํ๋ค.
๊ทธ๋์ ์ด ๋ฌธ์ ์ ๋ฐฉํฅ์, ํน์ ์ ๋ถํฐ๊ฐ ์๋, 1๋ถํฐ ์์ํ๋ฉด ๋๋ค.
1๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ซ์๋ 1์ด ๋ถ๋ชจ๋ค.
1์ ์์์ ์์์, 1์ ์์์ ๋ถ๋ชจ๋ก ๋๋ค.
-> ์ด๋ ๊ฒ ๋๋ฉด, DFS BFS๊ฐ์ ํ์์ด ๋ ์ค๋ฅธ๋ค.

์ด๋ฐ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.


1๋ก ์์ํ ๊ฒฝ์ฐ, ๊ทธ ์์์ธ 2์ 3์ 1์ ๋ถ๋ชจ๋ก ๋๋ฉฐ, ๋ฐฐ์ด์ ์ด๋ฅผ ์ ์ฅํ๋ค.
์ด์ , ๊ทธ ๋ค์ ์์ธ 2๋ฅผ ์ ํํ๊ฒ ๋๋ฉด,

2์ ํ์ ๋์์ 1, 4, 5๊ฐ ๋๋ค.
ํ์ง๋ง, 2์ ๋ถ๋ชจ์ธ 1์ ๊ฑด๋ค๊ฒ ๋๋ฉด ๋ฌดํ ๋ฃจํ๊ฐ ๊ฑธ๋ฆฌ๊ธฐ์, ์ด๋ฅผ ์ ๊ฑฐํด์ 4,5๋ฅผ ๋ด์ผ ํ๋ค.
์๋ ๊ธฐ์ ํ ํ์์ ์ฝ๋๋ dfs์ ์ฌ๊ท ์ฝ๋์์ "๊ทธ ์ ๊ฐ"์ ํ์ธํ์ฌ ๊ทธ๋ฅ ๋๊ธฐ๋๋ก ํ์ง๋ง, ์ด๋ฌํ ๋ฐฉ๋ฒ ์ธ์๋ visited ๋ฐฐ์ด์ ๋ง๋ค์ด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ ๋ฐฉ๋ฌธํ์ง ์๋๋ก ํด๋ ๋๋ค.
์ฌ๋ด์ผ๋ก ๋งํ์๋ฉด, visited ๋ฐฐ์ด์ ๋ง๋๋๊ฒ์ด ์ฝ 10%์ ๋ ๋น ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๋ฏ ํ๋ค.

๊ทธ๋ผ ์ด๋ ๊ฒ ๋ถ๋ชจ๊ฐ ์ฐพ์์ง๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ฉด ์ ๋ต์ด ๋์จ๋ค.
2. ์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<vector<int>> table;
vector<int> parents;
void init() {
int a,b;
cin >> N;
table.resize(N+1);
parents.resize(N+1, 0);
for(int i = 0; i < N-1; ++i) {
cin >> a >> b;
table[a].push_back(b);
table[b].push_back(a);
}
}
void dfs(const int start, const int bef) {
for(int target : table[start]) {
if(target == bef) continue;
parents[target] = start;
dfs(target, start);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
init();
dfs(1,0);
for(int i = 2; i <= N; ++i) {
cout << parents[i] << '\n';
}
return 0;
}
'SW > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค] 9205๋ฒ ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ - ํ๋ก์ด๋, DFS (C++) (0) | 2026.02.12 |
|---|---|
| [๋ฐฑ์ค] 15663๋ฒ N๊ณผ M(9) (C++) (0) | 2026.02.06 |
| [๋ฐฑ์ค] 11053๋ฒ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (C++) (0) | 2026.02.04 |