Submission #1335641

#TimeUsernameProblemLanguageResultExecution timeMemory
1335641gamigafyStranded Far From Home (BOI22_island)C++20
10 / 100
1095 ms13500 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define sz(x) (int)(x).size()

void solve() {
    int n, m;
    cin >> n >> m;

    vector<ll> s(n);
    for (auto &x : s) {
        cin >> x;
    }

    vector<vector<int>> adj(n);
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        u--, v--;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    ll tot = accumulate(s.begin(), s.end(), 0LL);
    auto bfs = [&](int x) {
        vector<bool> vis(n);
        priority_queue<pair<int, int>> pq;
        pq.emplace(0, x);
        vis[x] = true;
        ll res = s[x];
        while (!pq.empty()) {
            auto [siz, u] = pq.top();
            pq.pop();
            if (res >= -siz) {
                res -= siz;
                for (int v : adj[u]) {
                    if (!vis[v]) {
                        vis[v] = true;
                        pq.emplace(-s[v], v);
                    }
                }
            }
        }
        return res == tot;
    };

    for (int i = 0; i < n; i++) {
        cout << (bfs(i) ? 1 : 0);
    }
    cout << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t = 1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
#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...