Submission #580075

#TimeUsernameProblemLanguageResultExecution timeMemory
580075jasminStranded Far From Home (BOI22_island)C++17
100 / 100
514 ms82752 KiB
#include<bits/stdc++.h> using namespace std; #define int long long struct graph{ int n; vector<vector<int> > adi; vector<int> chef; vector<int> s; vector<set<int> > part; graph(int a, vector<int>& size){ n=a; adi.resize(n); chef.resize(n); iota(chef.begin(), chef.end(), 0); s.resize(n); part.resize(n); for(int i=0; i<n; i++){ s[i]=size[i]; part[i].insert(i); } } int find(int a){ if(chef[a]==a) return a; return chef[a]=find(chef[a]); } bool unite(int a, int b){ if(find(a)==find(b)){ return false; } if(s[find(a)]>s[find(b)]){ swap(a, b); } s[find(b)]+=s[find(a)]; for(auto e: part[find(a)]){ part[find(b)].insert(e); } chef[find(a)]=find(b); return true; } }; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<int> size(n); vector<pair<int,int> > r(n); for(int i=0; i<n; i++){ cin >> size[i]; r[i]={size[i], i}; } graph g(n, size); sort(r.begin(), r.end()); for(int i=0; i<m; i++){ int a, b; cin >> a >> b; g.adi[a-1].push_back(b-1); g.adi[b-1].push_back(a-1); } vector<int> tin(n); vector<bool> ans(n, true); for(int i=0; i<n; i++){ int v=r[i].second; tin[v]=i; for(auto u: g.adi[v]){ if(size[u]<=size[v]){ if(g.s[g.find(u)]<size[v]){ for(auto e: g.part[g.find(u)]){ ans[e]=false; } g.part[g.find(u)].clear(); } g.unite(u, v); } } } for(auto e: ans){ cout << e; } cout << "\n"; }
#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...