제출 #1320217

#제출 시각아이디문제언어결과실행 시간메모리
1320217wangzhiyi33Stranded Far From Home (BOI22_island)C++20
0 / 100
171 ms45964 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int maxn=2e5;

int n,m;
int dsu[maxn+2],sz[maxn+2],sum[maxn+2];
vector<int>nd[maxn+2];

int fin(int cur){
    if(dsu[cur]==cur)return cur;
    return dsu[cur]=fin(dsu[cur]);
}

void merg(int a,int b){
    a=fin(a),b=fin(b);
    if(a==b)return;
    if(sz[a]>sz[b])swap(a,b);

    sz[b]+=sz[a],dsu[a]=b;
    sum[b]+=sum[a];
    for(auto x : nd[a]){
        nd[b].push_back(x);
    }
    nd[a].clear();
}

vector<int>adj[maxn+2];
bool ans[maxn+2];

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    pair<int,int>a[n+1];
    int aa[n+1];
    for(int q=1;q<=n;q++){
        cin>>a[q].first;
        a[q].second=q;
        aa[q]=a[q].first;
    }
    for(int q=1;q<=m;q++){
        int u,v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    for(int q=1;q<=n;q++){
        dsu[q]=q;
        sz[q]=1; sum[q]=a[q].first;
        nd[q].push_back(q); ans[q]=true;
    }
    sort(a+1,a+n+1);

    for(int q=1;q<=n;q++){
        int hmm=a[q].second;
        for(auto x : adj[hmm]){
            if(fin(x)==fin(hmm) || sum[fin(hmm)]<aa[x])continue;
            if(sum[fin(x)]<aa[hmm]){
                //cout<<x<<" "<<hmm<<endl;
                for(auto y : nd[x]){
                    ans[y]=false;
                }
            }
            merg(x,hmm);
        }
    }

    for(int q=1;q<=n;q++){
        if(ans[q]){
            cout<<"1";
        }
        else{
            cout<<"0";
        }
    }   
    cout<<endl;
}

#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...