Submission #581884

#TimeUsernameProblemLanguageResultExecution timeMemory
581884tengiz05Stranded Far From Home (BOI22_island)C++17
100 / 100
165 ms25572 KiB
#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, m;
    cin >> n >> m;
    
    vector<int> s(n);
    for (int i = 0; i < n; i++) {
        cin >> s[i];
    }
    
    vector<pair<int, int>> e;
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        u--;
        v--;
        e.emplace_back(u, v);
    }
    
    sort(e.begin(), e.end(), [&](const pair<int, int> &a, const pair<int, int> &b) {
        return max(s[a.first], s[a.second]) < max(s[b.first], s[b.second]);
    });
    
    vector<int> p(n), mx(n);
    vector<i64> sum(n);
    vector<vector<int>> win(n);
    
    for (int i = 0; i < n; i++) {
        p[i] = i;
        mx[i] = sum[i] = s[i];
        win[i] = {i};
    }
    
    auto leader = [&](int u) {
        while (u != p[u]) u = p[u] = p[p[u]];
        return u;
    };
    
    auto unite = [&](int u, int v) {
        u = leader(u);
        v = leader(v);
        if (u == v)
            return;
        if (sum[u] < mx[v])
            win[u].clear();
        if (sum[v] < mx[u])
            win[v].clear();
        if (win[u].size() < win[v].size())
            swap(u, v);
        win[u].insert(win[u].end(), win[v].begin(), win[v].end());
        win[v].clear();
        sum[u] += sum[v];
        mx[u] = max(mx[u], mx[v]);
        p[v] = u;
    };
    
    for (auto [u, v] : e) {
        unite(u, v);
    }
    
    vector<int> ans(n);
    
    for (int u : win[leader(0)]) {
        ans[u] = 1;
    }
    
    for (int i = 0; i < n; i++) {
        cout << ans[i];
    }
    cout << "\n";
    
    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...