제출 #1206229

#제출 시각아이디문제언어결과실행 시간메모리
1206229AiperiiiStranded Far From Home (BOI22_island)C++20
100 / 100
153 ms60036 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define ff first
#define ss second
#define pb push_back
const int N=2e5+5;
vector <int> g[N],gr[N];
int a[N],ok[N],p[N],sum[N];
int n,m;
int find_set(int v){
    if(p[v]==v)return v;
    return p[v]=find_set(p[v]);
}

void union_set(int u,int v){
    u=find_set(u);
    v=find_set(v);
    if(gr[u].size()<gr[v].size())swap(u,v);
    
    for(auto x : gr[v])gr[u].pb(x);
    sum[u]+=sum[v];
    p[v]=u;
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    
    cin>>n>>m;
    vector <pair <int,int>> vv;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        vv.pb({a[i],i});
    }
    
    while(m--){
        int u,v;
        cin>>u>>v;
        g[u].pb(v);
        g[v].pb(u);
    }
    sort(all(vv));
    for(int i=1;i<=n;i++){
        ok[i]=1;
        gr[i].pb(i);
        sum[i]=a[i];
        p[i]=i;
    }
    for(auto [val,v] : vv){
        //cout<<val<<" "<<v<<"\n";
        set <int> x;
        for(auto to : g[v]){
            if(a[to]<val or (a[to]==val && to<v)){
                x.insert(find_set(to));
            }
        }
        
        for(auto v : x){
            //cout<<v<<" "<<sum[v]<<"\n";
            if(sum[v]<val){
                for(auto  id : gr[v]){
                    ok[id]=0;
                }
            }
        }
        //cout<<"\n";
        int ls=v;
        for(auto v : x){
            union_set(ls,v);
            ls=v;
        }
        
    }
    for(int i=1;i<=n;i++)cout<<ok[i];
}
/*
4 4
2 2 4 3
1 2
1 3
2 3
3 4
 
4 3
4 2 2 1
1 2
3 2
4 1
 
10 9
10 9 8 7 4 4 3 2 1 1
1 2
1 3
2 4
3 5
5 7
5 8
7 9
8 10
3 6

 1110101000
 
 
   1 1 1 1      1
 2 3 4 5 10 3 2 6 3
*/
#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...