※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 31115번 문제인 Graph Theory이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/31115
어떤 에지를 지워서 구하고자 하는 최솟값이
어떤 값
각 노드의 쌍에 대하여 지울 에지들이 무엇인지 전부 구하고, "지우면 안되는 에지"가 아닌 에지가 존재하는지를 판단하자. 이 과정은
아래는 제출한 소스코드이다.
#include <iostream>
#include <utility>
using namespace std;
int N, M, X[200000], Y[200000];
int A[200002];
bool func(int K) {
for (int i = 1; i <= N; i++) A[i] = 0;
for (int k = 0; k < M; k++) {
int val = Y[k] - X[k];
if (val > K) A[1]++, A[X[k]]--, A[Y[k]]++;
if (N - val > K) A[X[k]]++, A[Y[k]]--;
}
for (int i = 1; i <= N; i++) {
A[i] += A[i - 1];
if (!A[i]) return 1;
}
return 0;
}
int L, R;
void solve() {
L = 0, R = N;
for (int i = 0; i < M; i++) {
int x, y; cin >> x >> y;
if (x > y) swap(x, y);
if (x == y) {
i--, M--;
continue;
}
X[i] = x, Y[i] = y;
}
while (L < R) {
int mid = (L + R) / 2;
if (func(mid)) R = mid;
else L = mid + 1;
}
cout << L << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
while (cin >> N >> M) solve();
}
'BOJ' 카테고리의 다른 글
[BOJ 19358 // C++] Waiter's Problem (0) | 2024.07.29 |
---|---|
[BOJ 14943 // C++] 벼룩 시장 (0) | 2024.07.28 |
[BOJ 26862 // C++] Maxdifficent Group (0) | 2024.07.26 |
[BOJ 32046 // C++] Snacks within 300 Yen (0) | 2024.07.25 |
[BOJ 16450 // C++] Interruptores (2) | 2024.07.24 |