제출 #757839

#제출 시각아이디문제언어결과실행 시간메모리
757839abcvuitunggioStranded Far From Home (BOI22_island)C++17
100 / 100
160 ms34940 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],s[200001]; vector <int> ve[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(s[u],s[v]); u=f(u); v=f(v); if (u==v) return; if (a[u]<w) ve[u].clear(); if (a[v]<w) ve[v].clear(); if (ve[u].size()<ve[v].size()) swap(u,v); a[u]+=a[v]; p[v]=u; for (int i:ve[v]) ve[u].push_back(i); ve[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 >> s[i]; a[i]=s[i]; p[i]=i; res+='0'; ve[i]={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(s[x.u],s[x.v])<max(s[y.u],s[y.v]);}); for (int i=0;i<m;i++) unite(e[i].u,e[i].v); for (int i:ve[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...