Submission #1202286

#TimeUsernameProblemLanguageResultExecution timeMemory
1202286UnforgettableplStranded Far From Home (BOI22_island)C++20
100 / 100
490 ms85780 KiB
#include <bits/stdc++.h> using namespace std; #define int long long struct UFDS{ vector<int> siz,s,p; vector<set<int>> activenodes; set<pair<int,int>> ses; UFDS(int N,vector<int> s):s(s),siz(N+1,1),p(N+1),activenodes(N+1){ for(int i=1;i<=N;i++){ p[i]=i; activenodes[i].emplace(i); } } void activate(int x){ ses.emplace(s[x],x); } int findRoot(int x){ return p[x]==x ? x : findRoot(p[x]); } void unite(int a,int b){ a = findRoot(a); b = findRoot(b); if(a==b)return; if(siz[b]>siz[a])swap(a,b); ses.erase({s[a],a}); ses.erase({s[b],b}); s[a]+=s[b]; p[b]=a; siz[a]+=siz[b]; ses.emplace(s[a],a); if(activenodes[b].size()>activenodes[a].size())swap(activenodes[a],activenodes[b]); for(int i:activenodes[b])activenodes[a].emplace(i); } void eraseTill(int x){ while(!ses.empty() and ses.begin()->first<x){ activenodes[ses.begin()->second].clear(); ses.erase(ses.begin()); } } }; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N,M; cin >> N >> M; vector<int> s(N+1); map<int,vector<int>> villages; for(int i=1;i<=N;i++){ cin>>s[i]; villages[s[i]].emplace_back(i); } vector<vector<int>> adj(N+1); for(int i=1;i<=M;i++){ int a,b;cin>>a>>b; adj[a].emplace_back(b); adj[b].emplace_back(a); } UFDS dsu(N,s); for(auto[pop,vec]:villages){ dsu.eraseTill(pop); for(int&i:vec)dsu.activate(i); for(int&i:vec){ for(int&j:adj[i])if(s[j]<=pop){ dsu.unite(i,j); } } } int root = dsu.findRoot(1); vector<bool> ans(N+1); for(int i:dsu.activenodes[root])ans[i]=true; for(int i=1;i<=N;i++)cout<<(ans[i]?'1':'0'); 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...