제출 #651743

#제출 시각아이디문제언어결과실행 시간메모리
651743inksamuraiStranded Far From Home (BOI22_island)C++17
0 / 100
243 ms27220 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;i++) #define per(i,n) for(int i=n-1;i>=0;i--) #define rng(i,c,n) for(int i=c;i<n;i++) #define fi first #define se second #define pb push_back #define sz(a) (int)a.size() #define vec(...) vector<__VA_ARGS__> #define _3CZAtRo ios::sync_with_stdio(0),cin.tie(0) typedef long long ll; using pii=pair<int,int>; using vi=vector<int>; void print(){cout<<'\n';} template<class h,class...t> void print(const h&v,const t&...u){cout<<v<<' ',print(u...);} struct dsu{ int n,cmps; vi par,si,leb; vec(vi) rbts; // vec(set<pii>) evs; dsu(int _n=0){init(_n);} void init(int _n){ n=_n; cmps=n; par.clear(); si.clear(); leb.clear(); rbts.clear(); // evs.clear(); par.resize(n); si.resize(n); leb.resize(n); rbts.resize(n); // evs.resize(n); rep(i,n){ par[i]=i; si[i]=1; rbts[i].pb(i); } } void merge(int a,int b){ if(same(a,b)) return; cmps-=1; int u=parent(a); int v=parent(b); if(si[u]<si[v])swap(u,v); // for(auto p:evs[v]){ // evs[u].insert(p); // } for(auto x:rbts[v]){ rbts[u].pb(x); } leb[u]+=leb[v]; si[u]+=si[v]; par[v]=u; } int parent(int v){return par[v]=par[v]==v?v:parent(par[v]);} bool same(int u,int v){return parent(v)==parent(u);} int size(int v=-1){return v==-1?cmps:si[parent(v)];} }; signed main(){ _3CZAtRo; int n,m; cin>>n>>m; vi a(n); rep(i,n){ cin>>a[i]; } vec(vi) adj(n); rep(_,m){ int u,v; cin>>u>>v; u-=1,v-=1; adj[u].pb(v); adj[v].pb(u); } dsu uf(n); rep(v,n){ uf.leb[v]=a[v]; } vi ert; rep(i,n){ ert.pb(i); } sort(ert.begin(),ert.end(),[&](const int&l,const int&r){ return a[l]<a[r]; }); vi pns(n,1); rep(i,n){ int v=ert[i]; for(auto u:adj[v]){ if(a[v]>=a[u]){ int up=uf.parent(u); int now=uf.leb[up]; if(now<a[v]){ for(auto rbt:uf.rbts[up]){ pns[rbt]=0; } uf.rbts[up].clear(); } uf.merge(v,up); } } } rep(i,n){ cout<<pns[i]; } print(); }
#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...