- BFS
- ์ํฐ๋
- C++
- ์น๋ฆฐ์ด
- ์นด์นด์ค ์ฝํ
- ์ด๋ถํ์
- DFS
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋ฐฑ์ค
- golang
- Union-Find
- Python
- js
- ์ฌ๊ท
- go
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ค์ต์คํธ๋ผ
- nestjs
- ์๊ณ ๋ฆฌ์ฆ
- ํธ๋ฆฌ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- DP
- ๋นํธ๋งต
- ๋นํธ๋ง์คํน
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- LCs
- ์์ฝ๋
- ์นด์นด์ค2021
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 4195. ์น๊ตฌ ๋คํธ์ํฌ ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/4195
๋ฏผํ์ด๋ ์์ ๋คํธ์ํฌ ์ฌ์ดํธ์์ ์น๊ตฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ข์ํ๋ ์น๊ตฌ์ด๋ค. ์ฐํ๋ฅผ ๋ชจ์ผ๋ ์ทจ๋ฏธ๊ฐ ์๋ฏ์ด, ๋ฏผํ์ด๋ ์์ ๋คํธ์ํฌ ์ฌ์ดํธ์์ ์น๊ตฌ๋ฅผ ๋ชจ์ผ๋ ๊ฒ์ด ์ทจ๋ฏธ์ด๋ค.
์ด๋ค ์ฌ์ดํธ์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์๊ธด ์์๋๋ก ์ฃผ์ด์ก์ ๋, ๋ ์ฌ๋์ ์น๊ตฌ ๋คํธ์ํฌ์ ๋ช ๋ช ์ด ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์น๊ตฌ ๋คํธ์ํฌ๋ ์น๊ตฌ ๊ด๊ณ๋ง์ผ๋ก ์ด๋ํ ์ ์๋ ์ฌ์ด๋ฅผ ๋งํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ์น๊ตฌ ๊ด๊ณ์ ์ F๊ฐ ์ฃผ์ด์ง๋ฉฐ, ์ด ๊ฐ์ 100,000์ ๋์ง ์๋๋ค. ๋ค์ F๊ฐ์ ์ค์๋ ์น๊ตฌ ๊ด๊ณ๊ฐ ์๊ธด ์์๋๋ก ์ฃผ์ด์ง๋ค. ์น๊ตฌ ๊ด๊ณ๋ ๋ ์ฌ์ฉ์์ ์์ด๋๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ํ๋ฒณ ๋๋ฌธ์ ๋๋ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง ๊ธธ์ด 20 ์ดํ์ ๋ฌธ์์ด์ด๋ค.
์ถ๋ ฅ
์น๊ตฌ ๊ด๊ณ๊ฐ ์๊ธธ ๋๋ง๋ค, ๋ ์ฌ๋์ ์น๊ตฌ ๋คํธ์ํฌ์ ๋ช ๋ช ์ด ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์์ ์ ๋ ฅ
2
3
Fred Barney
Barney Betty
Betty Wilma
3
Fred Barney
Betty Wilma
Barney Betty
์์ ์ถ๋ ฅ
2
3
4
2
2
4
ํ์ด
Union- Find ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ
๋ฌธ์ ์์ ์ํ๋ ๊ฒ์ด ๋คํธ์ํฌ์ ํฌ๊ธฐ ์ด๊ธฐ ๋๋ฌธ์, parent๋ฐฐ์ด ์ด์ธ์ sizes๋ฐฐ์ด๋ ์ด์ฉํ์๋ค.
๋ ์น๊ตฌ์ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์ ๋ค,
์ต์ด input์ด๋ฉด ์ด๊ธฐํ๋ฅผ ํด์ฃผ๊ณ ,
๋ ์น๊ตฌ๋ฅผ Unionํด์ค๋ค.
๊ทธ ๋ค์ ๊ฐ๊ฐ ๋ ์น๊ตฌ์ ๋ถ๋ชจ๋ฅผ Findํ๊ณ , p1๊ณผ p2์ size๋ฅผ ๋น๊ตํด์ ๋ ํฐ ์ซ์๋ฅผ printํ๋ค.
์ฝ๋
#include <iostream>
#include <string>
#include <unordered_map>
#define endl '\n'
using namespace std;
unordered_map<string, string> parent; // <์ด๋ฆ, ๋ถ๋ชจ ์ด๋ฆ>
unordered_map<string, int> sizes; // <์ด๋ฆ, ํฌ๊ธฐ>
// ์ ๋์จ-ํ์ธ๋
string Finds(string f1) {
if (parent[f1] == f1) return f1;
return parent[f1] = Finds(parent[f1]);
}
void Union(string f1, string f2) {
f1 = Finds(f1);
f2 = Finds(f2);
if (f1 != f2) {
if (sizes[f1] < sizes[f2]) {
sizes[f2] += sizes[f1];
parent[f1] = f2;
}
else {
sizes[f1] += sizes[f2];
parent[f2] = f1;
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(NULL);
int T; cin >> T;
for (int t = 0;t < T;t++) {
int F; cin >> F;
parent.clear();
sizes.clear();
for (int f = 0;f < F;f++) {
string f1, f2; cin >> f1 >> f2;
if (parent.count(f1) == 0) { // ์ต์ด์
๋ ฅ์
parent[f1] = f1;
sizes[f1] = 1;
}
if (parent.count(f2) == 0) { // ์ต์ด์
๋ ฅ์
parent[f2] = f2;
sizes[f2] = 1;
}
Union(f1, f2); // ๋ ์น๊ตฌ ์ฐ๊ฒฐ
string p1 = Finds(parent[f1]);
string p2 = Finds(parent[f2]);
int result = (sizes[p1] > sizes[p2]) ? sizes[p1] : sizes[p2];
cout << result << endl;
}
}
return 0;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 1501. ์์ด ์ฝ๊ธฐ (0) | 2021.10.06 |
---|---|
[๋ฐฑ์ค/Python] 12757. ์ ์ค์ JBNU (0) | 2021.10.06 |
[๋ฐฑ์ค/C++] 1253. ์ข๋ค (0) | 2021.09.28 |
[C++/๋ฐฑ์ค] 22352. ํญ์ฒด ์ธ์ (0) | 2021.09.14 |
[๋ฐฑ์ค/C++] 14725. ๊ฐ๋ฏธ๊ตด (0) | 2021.09.07 |