๋ฐ์ํ
https://www.acmicpc.net/problem/11725
๋ฌธ์
๋ฃจํธ ์๋ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋, ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ 1์ด๋ผ๊ณ ์ ํ์ ๋, ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ธ๋์ ๊ฐ์ N (2 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N-1๊ฐ์ ์ค์ ํธ๋ฆฌ ์์์ ์ฐ๊ฒฐ๋ ๋ ์ ์ ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N-1๊ฐ์ ์ค์ ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋ฒํธ๋ฅผ 2๋ฒ ๋ ธ๋๋ถํฐ ์์๋๋ก ์ถ๋ ฅํ๋ค.
ํ์ด
๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์ธ์ ๊ทธ๋ํ๋ก ์ ์ฅํ๋ค
๋ฃจํธ (1) ๋ถํฐ bfs๋ก ํ์ํ๋ค
-> ํ์ฌ a๋ฅผ ํ์ํ๊ณ ์๊ณ ์์ b๋ฅผ ๋ฐ๊ฒฌ
-> b๋ฅผ ํ์ ์ง์ด๋ฃ๊ธฐ ์ b์ ๋ถ๋ชจ๋ ธ๋๊ฐ a๋ผ๋ ์ฌ์ค์ ์ ๋ ฅ (parent[b] = a)
-> ์ถ๋ ฅ
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
// ์
๋ ฅ
int n, a,b;
cin >> n;
vector<vector<int>> graph(n+1);
for(int i=0; i<n-1; i++) {
cin >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a);
}
// parent[i] = i์ ๋ถ๋ชจ
vector<int> parent(n+1);
// bfs
vector<bool> visit(n+1, false);
visit[1] = true;
queue<int> q;
q.push(1);
while(!q.empty()) {
int cur = q.front();
q.pop();
for(int i : graph[cur]) {
if(visit[i])
continue;
parent[i] = cur;
visit[i] = true;
q.push(i);
}
}
// ์ถ๋ ฅ
for(int i=2; i<=n; i++)
cout << parent[i] << "\n";
return 0;
}
๋ฐ์ํ
'๐ Cpp > [Solved.ac] Class2~4' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 11727๋ฒ: 2xn ํ์ผ๋ง 2 (0) | 2023.03.27 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 9461๋ฒ: ํ๋๋ฐ ์์ด (0) | 2023.03.27 |
[BOJ][C++] ๋ฐฑ์ค 1260๋ฒ: DFS์ BFS (0) | 2023.03.24 |
[BOJ][C++] ๋ฐฑ์ค 1764๋ฒ: ๋ฃ๋ณด์ก (0) | 2023.03.24 |
[BOJ][C++] ๋ฐฑ์ค 108282๋ฒ: ์คํ (0) | 2023.03.15 |