-
[10775] 공항BOJ 2022. 8. 2. 09:42
https://www.acmicpc.net/problem/10775
10775번: 공항
예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불
www.acmicpc.net
사용할 수 있는 게이트중 번호가 큰 것 부터 도킹하는것이 유리하다.
유니온 파인드에서 정점 번호가 작은쪽으로 합쳐주면 남아있는 게이트중 가장 번호가 큰 것을 쉽게 찾을 수 있다.
#include <bits/stdc++.h>using namespace std;#ifdef ONLINE_JUDGEconstexpr bool local = false;#elseconstexpr bool local = true;#endifusing ll = long long;using pi = pair<ll, ll>;class UF {public:vector<int> p;UF(int n) { p = vector<int>(n + 1, -1); }int find(int cur) {if (p[cur] < 0) return cur;return p[cur] = find(p[cur]);}#define union _unionvoid union(int A, int B) {A = find(A), B = find(B);if (A == B) return;if (A < B)p[A] += p[B], p[B] = A;elsep[B] += p[A], p[A] = B;}};int g, p, ans;bool chk[100010];int main(void) {if (!local) ios_base::sync_with_stdio(0), cin.tie(0);cin >> g >> p;auto uf = UF(123456);while (p--) {int x;cin >> x;int tar = uf.find(x);if (tar == 0 or chk[tar]) break;chk[tar] = true;uf.union(tar, tar - 1);ans++;}cout << ans;return 0;}
'BOJ' 카테고리의 다른 글
[11493] 동전 교환 (1) 2022.11.23 [12971] 숫자 놀이 (0) 2022.08.11 lazy 세그 - 비재귀 (0) 2022.07.26 [10999] 구간 합 구하기 2 (0) 2022.07.26 [13306] 트리 (0) 2022.07.20