Submission #830501

#TimeUsernameProblemLanguageResultExecution timeMemory
830501WarinchaiStranded Far From Home (BOI22_island)C++14
20 / 100
858 ms524288 KiB
#include<bits/stdc++.h>
using namespace std;
long long ar[200005];
vector<int>v[200005];
int vis[200005];
int n,m;
int check(int i){
    for(int x=1;x<=n;x++){
        vis[x]=0;
    }
    priority_queue<pair<long long,int>,vector<pair<long long,int> >,greater<pair<long long,int> > >pq;
    pq.push({ar[i],i});
    vis[i]=1;
    long long power=0;
    int ck=0;
    while(!pq.empty()){
        long long np=pq.top().first;
        int x=pq.top().second;
        //cout<<x<<" "<<power<<endl;
        pq.pop();
        if(x==i||power>=np){
            power+=np;
            for(int j=0;j<v[x].size();j++){
                if(vis[v[x][j]]==1){
                    continue;
                }
                vis[v[x][j]]=1;
                pq.push({ar[v[x][j]],v[x][j]});
            }
        }else{
            ck=1;
            break;
        }
    }
    if(!ck){
        return 1;
    }else{
        return 0;
    }
}
long long sum[200005];
long long mw[200005];
void dfs(int i,int p){
    long long sm=ar[i];
    for(int j=0;j<v[i].size();j++){
        if(v[i][j]==p){
            continue;
        }
        dfs(v[i][j],i);
        sm+=sum[v[i][j]];
    }
    sum[i]=sm;
}
void fans(int i,int p){
    if(i==1){
        mw[i]=1;
    }
    //cout<<"i:"<<i<<endl;
    for(int j=0;j<v[i].size();j++){
        if(v[i][j]==p){
            continue;
        }
        //cout<<v[i][j]<<" "<<sum[v[i][j]]<<" "<<ar[i]<<endl;
        if(sum[v[i][j]]>=ar[i]){
            //cout<<"work"<<endl;
            mw[v[i][j]]=1;
            fans(v[i][j],i);
        }
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>ar[i];
    }
    for(int i=1;i<=m;i++){
        int a,b;
        cin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    if(n>2000){
        dfs(1,0);
        fans(1,0);
        /*for(int i=1;i<=n;i++){
            cout<<sum[i]<<" ";
        }
        cout<<endl;*/
        for(int i=1;i<=n;i++){
            cout<<mw[i];
        }
        return 0;
    }
    for(int i=1;i<=n;i++){
        cout<<check(i);
    }
}

Compilation message (stderr)

island.cpp: In function 'int check(int)':
island.cpp:23:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |             for(int j=0;j<v[x].size();j++){
      |                         ~^~~~~~~~~~~~
island.cpp: In function 'void dfs(int, int)':
island.cpp:45:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     for(int j=0;j<v[i].size();j++){
      |                 ~^~~~~~~~~~~~
island.cpp: In function 'void fans(int, int)':
island.cpp:59:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for(int j=0;j<v[i].size();j++){
      |                 ~^~~~~~~~~~~~
#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...