ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 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';
    }

     

     

Designed by Tistory.