Submission #711014

#TimeUsernameProblemLanguageResultExecution timeMemory
711014ld_minh4354Stranded Far From Home (BOI22_island)C++17
100 / 100
368 ms75516 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pb push_back #define debug(x) cout<<#x<<": "<<x<<"\n" int n,m,s[200005],ans[200005]; pair<int,pair<int,int>> ed[200005]; int parent[200005],grpsize[200005],sum[200005]; set<int> nodes[200005]; int getroot(int x) { if (x==parent[x]) return x; return getroot(parent[x]); } void merge(int x,int y,int id) { int root_x=getroot(x); int root_y=getroot(y); if (root_x==root_y) return; if (sum[root_x]<ed[id].fi) { for (int u:nodes[root_x]) ans[u]=0; while (nodes[root_x].size()>0) nodes[root_x].erase(nodes[root_x].begin()); } if (sum[root_y]<ed[id].fi) { for (int u:nodes[root_y]) ans[u]=0; while (nodes[root_y].size()>0) nodes[root_y].erase(nodes[root_y].begin()); } if (grpsize[root_x]<grpsize[root_y]) swap(root_x,root_y); parent[root_y]=root_x; grpsize[root_x]+=grpsize[root_y]; sum[root_x]+=sum[root_y]; for (int u:nodes[root_y]) nodes[root_x].insert(u); } signed main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); // freopen("input.000","r",stdin); // freopen("output.000","w",stdout); // srand((unsigned)time(NULL)); // rand() int i,j; cin>>n>>m; for (i=1;i<n+1;i++) cin>>s[i]; for (i=1;i<m+1;i++) { cin>>ed[i].se.fi>>ed[i].se.se; ed[i].fi=max(s[ed[i].se.fi], s[ed[i].se.se]); } sort(ed+1,ed+m+1); ed[m+1]={1e18,{0,0}}; for (i=1;i<n+1;i++) { parent[i]=i; grpsize[i]=1; sum[i]=s[i]; ans[i]=1; nodes[i].insert(i); } for (i=1;i<m+1;i++) merge(ed[i].se.fi, ed[i].se.se, i); for (j=1;j<n+1;j++) cout<<ans[j]; }
#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...