-
백준 13463 Brexit카테고리 없음 2024. 2. 13. 15:56
나라 $s$가 연합을 탈퇴하기로 했습니다. 어떤 나라 $x$는 인접한 나라 중 절반 이상의 나라가 연합을 탈퇴하면 $x$또한 연합을 탈퇴합니다. 각 정점마다 이웃한 나라 중에서 연합을 탈퇴한 나라의 개수를 유지하면 큐를 이용한 위상 정렬처럼 쉽게 구현할 수 있습니다.
#include <bits/stdc++.h> #define FAST() cin.tie(0)->sync_with_stdio(0) using namespace std; int main() { FAST(); int n, m, k, s; cin >> n >> m >> k >> s; vector<vector<int>> adj(n + 1); vector<int> deg(n + 1); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); deg[u]++, deg[v]++; } for (int i = 1; i <= n; i++) { deg[i] = (deg[i] + 1) / 2; } queue<int> q; vector<int> vis(n + 1); vis[s] = true; q.push(s); while (!q.empty()) { int here = q.front(); q.pop(); for (int there : adj[here]) { deg[there]--; if (!vis[there] && deg[there] == 0) { q.push(there); vis[there] = true; } } } cout << (vis[k] ? "leave" : "stay") << '\n'; }