Submission #651057

#TimeUsernameProblemLanguageResultExecution timeMemory
651057600MihneaStranded Far From Home (BOI22_island)C++17
100 / 100
322 ms35572 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int main() {
  ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
  int n,m;
  cin>>n>>m;
  vector<ll> s(n);
  vector<int> t(n,-1);
  vector<int> ord(n);
  vector<vector<int>> bosses(n);
  vector<vector<int>> g(n);
  for (int i=0;i<n;i++) {
    cin>>s[i];
    ord[i]=i;
    bosses[i]={i};
  }
  sort(ord.begin(),ord.end(),[&](int i,int j){return s[i]<s[j];});
  for (int i=0;i<m;i++) {
    int a,b;
    cin>>a>>b;
    a--, b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  function<int(int)>root=[&](int a){
    if(t[a]==a){
      return a;
    }else{
      return t[a]=root(t[a]);
    }
  };
  function<void(int,int)>join=[&](int a,int b){
    a=root(a);
    b=root(b);
    if(a==b){
      assert(0);
      return;
    }
    if ((int)bosses[a].size()>(int)bosses[b].size()){
      swap(a,b);
    }
    t[a]=b;
    s[b]+=s[a];
    for (auto &boss:bosses[a]){
      bosses[b].push_back(boss);
    }
  };
  for (auto &v:ord){
    /// activate vertex v
    vector<int> comps;
    for (auto &ngh:g[v]){
      if (t[ngh]!=-1){
        comps.push_back(root(ngh));
      }
    }
    sort(comps.begin(),comps.end());
    comps.resize(unique(comps.begin(),comps.end())-comps.begin());
    t[v]=v;
    for (auto &c:comps){
      if (s[c]<s[v]){
        bosses[c].clear();
      }
    }
    for(auto&c:comps){
      join(v,c);
    }
  }
  vector<int> isboss(n,0);
  for (auto &boss:bosses[root(0)]){
    isboss[boss]=1;
  }
  for (auto &is:isboss){
    cout<<is;
  }
  cout<<"\n";
  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...