Submission #1099397

#TimeUsernameProblemLanguageResultExecution timeMemory
1099397epicci23Stranded Far From Home (BOI22_island)C++17
100 / 100
455 ms80232 KiB
#include "bits/stdc++.h"
#define int long long
#define all(v) v.begin() , v.end()
#define sz(a) (int)a.size()
using namespace std;

const int N = 2e5 + 5;
int s[N],par[N],val[N];
vector<int> v[N],comp[N];
bool open[N],ans[N];
priority_queue<int> pq[N];

int find(int a){
  if(par[a]==a) return a;
  return par[a]=find(par[a]);
}

void unite(int a,int b){
  a=find(a),b=find(b);
  if(a==b) return;
  if(sz(comp[a])>sz(comp[b])) swap(a,b);
  val[b]+=val[a];
  par[a]=b;
  for(int x:comp[a]) comp[b].push_back(x);
  comp[a].clear();
  while(!pq[a].empty()){
  	pq[b].push(pq[a].top());
  	pq[a].pop();
  }
}

void _(){
  int n,m;
  cin >> n >> m;
  iota(par,par+N,0LL);
  for(int i=1;i<=n;i++) comp[i].push_back(i);
  for(int i=1;i<=n;i++){
  	cin >> s[i];
  	val[i]+=s[i];
  }
  for(int i=1;i<=m;i++){
  	int a,b;
  	cin >> a >> b;
  	v[a].push_back(b);
  	v[b].push_back(a);
  }

  map<int,vector<int>> lol;
  for(int i=1;i<=n;i++) lol[s[i]].push_back(i);
  for(int i=1;i<=n;i++) for(int x:v[i]) pq[i].push(-s[x]);
  
  for(auto i:lol){
   
    for(int u:i.second) open[u]=1;
    for(int u:i.second){
      for(int x:v[u]){
        if(!open[x]) continue;
        unite(u,x);
      }
    }
    
    vector<int> cur;
    for(int u:i.second) cur.push_back(find(u));
    sort(all(cur));
    cur.erase(unique(all(cur)),cur.end());
    
    for(int u:cur){
     while(!pq[u].empty() && pq[u].top()*-1<=i.first) pq[u].pop();
     if(pq[u].empty()){
      for(int x:comp[u]) ans[x]=1;
      comp[u].clear();
     }
     else if(!pq[u].empty() && pq[u].top()*-1>val[u]){
      for(int x:comp[u]) ans[x]=0;
      comp[u].clear();	
     }
    }
  }

  for(int i=1;i<=n;i++) cout << ans[i];
  cout << '\n';
}

int32_t main(){
  cin.tie(0); ios::sync_with_stdio(0);
  int tc=1;//cin >> tc;
  while(tc--) _();
  return 0;
}
#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...