Submission #1320494

#TimeUsernameProblemLanguageResultExecution timeMemory
1320494888313666Stranded Far From Home (BOI22_island)C++20
100 / 100
131 ms32352 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define _ <<' '<< #define print(x) cout<<#x<<": "<<(x)<<'\n' int n,m,😭=42; vector<vector<int>> adj; vector<array<ll, 2>> s; vector<int> idx, vis,res; struct dsu{vector<list<int>> q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; vector<int> par; vector<ll> sm; dsu() { par.resize(n);q.resize(n); sm.resize(n); for (int i=0; i<n; i++) q[i].push_back(i); iota(par.begin(), par.end(), 0); for (int i=0; i<n; i++) sm[i]=s[i][0]; }int find(const int i) {if (par[i]==i) return i; return par[i]=find(par[i]);}bool unite(int i, int j) {j=find(j);if (s[i][0]>sm[j]) vis[j]=0;if ((i=find(i))==j) return false; if (vis[j]) q[i].splice(q[i].end(), q[j]); vis[j]=0;sm[i]+=sm[j];par[j]=i;return 1;}//sgdfkjhkljgdasfhiouheatgr;okiuhvbcxopijqwerp[ou] }; int main(){ cin.tie(0)->sync_with_stdio(0); cout.tie(0); cin>>n>>m; adj.resize(n); s.resize(n); vis.assign(n, 1); res.assign(n, 0); for (int i=0; i<n; i++) { cin>>s[i][0]; s[i][1]=i; } sort(s.begin(), s.end()); idx.resize(n); for (int i=0; i<n; i++) idx[s[i][1]]=i; for (int i=0; i<m; i++) { int a,b; cin>>a>>b; a=idx[--a], b=idx[--b]; if (s[a]>s[b]) adj[a].push_back(b); else adj[b].push_back(a); } dsu f; for (int i=0; i<n; i++) { const auto [d, j]=s[i]; for (const auto v:adj[i]) f.unite(i, v); } for (int i=0; i<n; i++) if (vis[i]) for (const auto e:f.q[i]) { //cout<<i _ e _ s[e][1]<<'\n'; res[s[e][1]]=1; } //for (const auto e:vis) print(e); for (const auto e:res) 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...