제출 #757836

#제출 시각아이디문제언어결과실행 시간메모리
757836abcvuitunggioStranded Far From Home (BOI22_island)C++17
0 / 100
243 ms25704 KiB
#include <bits/stdc++.h> #define int long long using namespace std; struct edge{ int u,v; }e[200001]; int n,m,p[200001],a[200001]; set <int> s[200001]; string res; int f(int i){ return (p[i]==i?i:p[i]=f(p[i])); } void unite(int u, int v){ int w=max(a[u],a[v]); u=f(u); v=f(v); if (u==v) return; if (a[u]<w) s[u].clear(); if (a[v]<w) s[v].clear(); if (s[u].size()<s[v].size()) swap(u,v); a[u]+=a[v]; p[v]=u; for (int i:s[v]) s[u].insert(i); s[v].clear(); } int32_t main(){ ios_base::sync_with_stdio(NULL);cin.tie(nullptr); cin >> n >> m; for (int i=1;i<=n;i++){ cin >> a[i]; p[i]=i; res+='0'; s[i].insert(i); } for (int i=0;i<m;i++) cin >> e[i].u >> e[i].v; sort(e,e+m,[](edge x, edge y){return max(a[x.u],a[x.v])<max(a[y.u],a[y.v]);}); for (int i=0;i<m;i++) unite(e[i].u,e[i].v); for (int i:s[f(1)]) res[i-1]='1'; cout << res; }
#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...