Submission #757839

#TimeUsernameProblemLanguageResultExecution timeMemory
757839abcvuitunggioStranded Far From Home (BOI22_island)C++17
100 / 100
160 ms34940 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct edge{
    int u,v;
}e[200001];
int n,m,p[200001],a[200001],s[200001];
vector <int> ve[200001];
string res;
int f(int i){
    return (p[i]==i?i:p[i]=f(p[i]));
}
void unite(int u, int v){
    int w=max(s[u],s[v]);
    u=f(u);
    v=f(v);
    if (u==v)
        return;
    if (a[u]<w)
        ve[u].clear();
    if (a[v]<w)
        ve[v].clear();
    if (ve[u].size()<ve[v].size())
        swap(u,v);
    a[u]+=a[v];
    p[v]=u;
    for (int i:ve[v])
        ve[u].push_back(i);
    ve[v].clear();
}
int32_t main(){
    ios_base::sync_with_stdio(NULL);cin.tie(nullptr);
    cin >> n >> m;
    for (int i=1;i<=n;i++){
        cin >> s[i];
        a[i]=s[i];
        p[i]=i;
        res+='0';
        ve[i]={i};
    }
    for (int i=0;i<m;i++)
        cin >> e[i].u >> e[i].v;
    sort(e,e+m,[](edge x, edge y){return max(s[x.u],s[x.v])<max(s[y.u],s[y.v]);});
    for (int i=0;i<m;i++)
        unite(e[i].u,e[i].v);
    for (int i:ve[f(1)])
        res[i-1]='1';
    cout << res;
}
#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...