Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 다이나믹 프로그래밍
- 누적 합
- 자료구조
- 유니온 파인드
- 시뮬레이션
- BFS
- 다익스트라
- 트리
- 알고리즘
- XR Interaction Toolkit
- 재귀
- c++
- DFS
- Team Fortress 2
- 그래프
- 구현
- 브루트포스
- 백준
- 정렬
- 백트래킹
- Unreal Engine 5
- 우선순위 큐
- 스택
- 유니티
- ue5
- 문자열
- 투 포인터
- 수학
- 그리디 알고리즘
- VR
Archives
- Today
- Total
1일1알
백준 17352번 여러분의 다리가 되어 드리겠습니다! C++ 본문
https://www.acmicpc.net/problem/17352
17352번: 여러분의 다리가 되어 드리겠습니다!
선린월드에는 N개의 섬이 있다. 섬에는 1, 2, ..., N의 번호가 하나씩 붙어 있다. 그 섬들을 N - 1개의 다리가 잇고 있으며, 어떤 두 섬 사이든 다리로 왕복할 수 있다. 어제까지는 그랬다. "왜 다리
www.acmicpc.net
유니온 파인드
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
int n;
vector<int> height;
vector<int> parent;
int GetParent(int a) {
if (a == parent[a]) return a;
return parent[a] = GetParent(parent[a]);
}
void Merge(int u, int v) {
u = GetParent(u);
v = GetParent(v);
if (u == v) return;
if (height[u] > height[v])
::swap(u, v);
parent[u] = v;
if (height[u] == height[v])
height[v]++;
}
int main()
{
cin >> n;
height = vector<int>(n + 1, 1);
parent = vector<int>(n + 1);
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
for (int i = 0; i < n - 2; i++) {
int s, e;
cin >> s >> e;
Merge(s, e);
}
int _parent = GetParent(1);
int ans = 0;
for (int i = 2; i <= n; i++) {
if (GetParent(i) != _parent) {
ans = GetParent(i);
break;
}
}
cout << _parent << " " << ans;
}
'알고리즘' 카테고리의 다른 글
백준 12869번 뮤탈리스크 C++ (0) | 2022.10.22 |
---|---|
백준 14271번 그리드 게임 C++ (0) | 2022.10.14 |
백준 10974번 모든 순열 C++ (0) | 2022.10.11 |
백준 2056번 작업 C++ (0) | 2022.10.10 |
백준 5397번 키로거 C++ (0) | 2022.10.09 |