Submission #1327339

#TimeUsernameProblemLanguageResultExecution timeMemory
1327339nguyenkhangninh99Stranded Far From Home (BOI22_island)C++20
0 / 100
82 ms12264 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int maxn = 2e5 + 5;
int bad[maxn], sum[maxn], c[maxn], p[maxn];
int find(int u){
    if(p[u] == u) return u;
    p[u] = find(p[u]);
    bad[u] |= bad[p[u]]; 
    return p[u];
}
void merge(int u, int v){
    u = find(u), v = find(v);
    if(u == v) return;
    if(c[u] < c[v]) swap(u, v);  
    if(c[u] > sum[v]) bad[v] = 1;
    sum[u] += sum[v];
    p[v] = u; 
}
signed main(){
    ios_base::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    
    int n, m; cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> c[i]; 
        sum[i] = c[i];
        p[i] = i; 
    }
    vector<array<int, 3>> edge;
    while(m--){
        int u, v; cin >> u >> v;
        edge.push_back({max(c[u], c[v]), u, v});
    }
    sort(edge.begin(), edge.end());
    for(auto [w, u, v]: edge) merge(u, v);
    for(int i = 1; i <= n; i++){
        find(i);
        cout << !bad[i];
    }
}
#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...