제출 #859071

#제출 시각아이디문제언어결과실행 시간메모리
859071vgtcrossStranded Far From Home (BOI22_island)C++17
10 / 100
1079 ms13996 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int N = 200200;

vector<int> adj[N];

void solve() {
    int n, m;
    cin >> n >> m;
    
    vector<ll> s(n+1);
    for (int i = 1; i <= n; ++i) cin >> s[i];
    
    for (int i = 0; i < m; ++i) {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    
    for (int i = 1; i <= n; ++i) {
        priority_queue<pll> pq;
        ll sum = 0;
        pq.push({-s[i], i});
        int left = n;
        vector<bool> vis(n, 0);
        while (pq.size()) {
            pll p = pq.top();
            pq.pop();
            if (vis[p.second]) continue;
            
            p.first *= -1;
            if (sum != 0 && sum < p.first) break;
            vis[p.second] = 1;
            --left;
            sum += p.first;
            
            for (int v : adj[p.second]) if (!vis[v]) {
                pq.push({-s[v], v});
            }
        }
        
        cout << (left == 0);
    }
    cout << '\n';
}

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...