득이공간

[백준 C++] 10775 공항 - 분리집합 본문

PS/알고리즘 문제풀이

[백준 C++] 10775 공항 - 분리집합

쟁득 2024. 3. 25. 13:52

 

10775번: 공항

예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불

www.acmicpc.net

cpp
#include <iostream> using namespace std; bool LandingGate[100001]; int Root[100001]; int Find(int Node) { if (Node == Root[Node]) { ‌‌return Node; } return Root[Node] = Find(Root[Node]); } void Union(int NodeA, int NodeB) { int A = Find(NodeA); int B = Find(NodeB); int Min = min(A, B); ‌Root[A] = Min; ‌Root[B] = Min; } int main() { ‌ios::sync_with_stdio(false); ‌cin.tie(nullptr); cout.tie(nullptr); for (int i = 1; i <= 100000; ++i) { ‌‌Root[i] = i; } int G, P; ‌cin >> G >> P; int Cnt = 0; for (int i = 1; i <= P; ++i) { ‌‌int g; ‌‌cin >> g; ‌‌if ((g = Find(g)) == 0) ‌‌{ ‌‌‌break; ‌‌} ‌‌Union(g, g - 1); ‌‌++Cnt; } ‌cout << Cnt; }

 

유니온 & 파인드 연산을 이용해서 도킹된 게이트끼리 묶어주면서 푸는 문제입니다.

입력 받은 게이트 번호의 파인드 연산이 맨앞 번호가 아닐 동안,

해당 게이트와 바로 앞 게이트를 유니온 연산하고 도킹 개수를 카운팅하는 작업을 반복해줍니다.