๋์ด๋ : ๊ณจ๋ 4
๊ฑธ๋ฆฐ ์๊ฐ : 40๋ถ
๋ฌธ์
๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
๋ฃจํธ๊ฐ ์๋ ํธ๋ฆฌ(rooted tree)๊ฐ ์ฃผ์ด์ง๊ณ , ๊ทธ ํธ๋ฆฌ ์์ ๋ ์ ์ ์ด ์ฃผ์ด์ง ๋ ๊ทธ๋ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์(Nearest Common Anscestor)์ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ฉ๋๋ค.
- ๋ ๋ ธ๋์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์, ๋ ๋ ธ๋๋ฅผ ๋ชจ๋ ์์์ผ๋ก ๊ฐ์ง๋ฉด์ ๊น์ด๊ฐ ๊ฐ์ฅ ๊น์(์ฆ ๋ ๋ ธ๋์ ๊ฐ์ฅ ๊ฐ๊น์ด) ๋ ธ๋๋ฅผ ๋งํฉ๋๋ค.
์๋ฅผ ๋ค์ด 15์ 11๋ฅผ ๋ชจ๋ ์์์ผ๋ก ๊ฐ๋ ๋ ธ๋๋ 4์ 8์ด ์์ง๋ง, ๊ทธ ์ค ๊น์ด๊ฐ ๊ฐ์ฅ ๊น์(15์ 11์ ๊ฐ์ฅ ๊ฐ๊น์ด) ๋ ธ๋๋ 4 ์ด๋ฏ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ 4๊ฐ ๋ฉ๋๋ค.
๋ฃจํธ๊ฐ ์๋ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๊ณ , ๋ ๋ ธ๋๊ฐ ์ฃผ์ด์ง ๋ ๊ทธ ๋ ๋ ธ๋์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์
ํ์ด
- b+tree๋ฅผ
vector<int>
์ถ๋ ฅํด์ ํด๊ฒฐ
์ฝ๋
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int n;
int head;
vector<vector<int>> childrenList;
vector<int> parentList;
vector<int> findVector(int n) {
int start = n;
vector<int> str;
str.push_back(start);
while (parentList[start] != 0) {
start = parentList[start];
str.push_back(start);
}
// ๋ค์ง๊ธฐ => ์ ๊ฑฐํด๋ ๋๊ฐ์
/*vector<int> res(str.size());
for (int i = 0; i < str.size(); i++) {
res[i] = str[str.size() - i-1];
}*/
return str;
}
int findCommonParent(int n1, int n2) {
vector<int> str1 = findVector(n1);
vector<int> str2 = findVector(n2);
int minLength = str1.size() < str2.size() ? str1.size() : str2.size();
int result = head;
for (int i = 1; i <= minLength; i++) {
if (str1[str1.size()-i] != str2[str2.size()-i])
break;
result = str1[str1.size() - i];
}
return result;
}
int main() {
// ๋ฃจํธ๋ถํฐ ํด๋น ๋
ธ๋๊น์ง์ path๋ฅผ string์ผ๋ก ์ถ๋ ฅ
// ๋์ด(string์ ๊ธธ์ด)๋ ๊น์ด๋ดค์ 10^4
int t; cin >> t;
while (t--) {
cin >> n;
// ์ด๊ธฐํ
childrenList = vector<vector<int>>(n + 1, vector<int>());
parentList = vector<int>(n+1);
for (int i = 0; i < n-1; i++) {
int s; int e; cin >> s >> e;
childrenList[s].push_back(e);
parentList[e] = s; // ๋ถ๋ชจ ๋
ธ๋ ์ ์ฅ
}
// ๋ฃจํธ๋
ธ๋ ์ฐพ๊ธฐ
head = 1;
while (parentList[head] != 0) {
head = parentList[head];
}
int n1, n2; cin >> n1 >> n2; // ์ฐพ์ ๋ ๋
ธ๋
cout << findCommonParent(n1, n2) << '\n';
}
}
๊ฐ์
- ๋ค์ง๊ธฐ ์ ๊ฑฐํด๋ ์๊ฐ ๋๊ฐ์
๊ฒฐ๊ณผ
์์ด๋ | ๋ฉ๋ชจ๋ฆฌ | ์๊ฐ | ์ธ์ด | ์ฝ๋ ๊ธธ์ด |
---|---|---|---|---|
gmldms784 | 2684 | 28 | C++17 / ์์ | 1482 |
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 18240 :: ์ด์ง ํ์ ํธ๋ฆฌ ๋ณต์ํ๊ธฐ (0) | 2021.07.11 |
---|---|
[c++] BOJ 19535 :: ใทใทใทใ (0) | 2021.07.11 |
[c++] BOJ 5052 :: ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2021.07.03 |
[c++] BOJ 1600 :: ๋ง์ด ๋๊ณ ํ ์์ญ์ด (0) | 2021.06.25 |
[c++] BOJ 1194 :: ๋ฌ์ด ์ฐจ์ค๋ฅธ๋ค ๊ฐ์ (0) | 2021.06.02 |
Comment