Submission #1351099

#TimeUsernameProblemLanguageResultExecution timeMemory
1351099NewtonabcStranded Far From Home (BOI22_island)C++20
0 / 100
126 ms44208 KiB
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
long long a[N],s[N],val[N];
int pa[N],out[N];
bool vs[N];
vector<int> adj[N],con,f[N],c[N];
int fd(int x){return lower_bound(con.begin(),con.end(),x)-con.begin();}
int root(int x){if(pa[x]==x) return x; return root(pa[x]);}
void merge(int u,int v){
    int ru=root(u),rv=root(v);
    if(c[ru].size()>c[rv].size()) swap(ru,rv),swap(u,v);
    pa[ru]=rv;
    val[rv]+=val[ru];
    for(auto x:c[ru]) c[rv].push_back(x);
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,m; cin>>n >>m;
    for(int i=1;i<=n;i++) cin>>a[i],con.push_back(a[i]);
    for(int i=1;i<=n;i++) pa[i]=i,val[i]=a[i];
    sort(con.begin(),con.end());
    con.erase(unique(con.begin(),con.end()),con.end());
    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++) c[i].push_back(i);
    int sz=con.size();
    for(int i=1;i<=n;i++) f[fd(a[i])].push_back(i);
    queue<int> q;
    for(int i=0;i<sz;i++){
        for(auto u:f[i]){
            for(auto v:adj[u]){
                if(a[v]<=a[u]) merge(u,v);
            }
        }
        for(auto u:f[i]){
            int ru=root(u);
            int mn=INT_MAX,p=-1;
            for(auto v:adj[u]){
                if(mn>a[v]){
                    mn=a[v],p=v;
                }
            }
            if(p!=-1){
                if(val[ru]<mn){
                    for(auto x:c[ru]){
                        out[x]=1;
                    }
                    c[ru].clear();
                }
            }       
        }
    }
    for(int i=1;i<=n;i++){
        if(out[i]) cout<<0;
        else cout<<1;
    }
}
#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...