Submission #666339

#TimeUsernameProblemLanguageResultExecution timeMemory
666339mychecksedadStranded Far From Home (BOI22_island)C++17
10 / 100
215 ms30336 KiB
/* Author : Mychecksdead */ #include<bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define pb push_back const int N = 2e5 + 100; struct Dsu{ vector<int> s, p; vector<long long> sum; Dsu(int n, int a[]){ s.resize(n + 1, 1); p.resize(n + 1); sum.resize(n + 1, 0ll); for(int i = 0; i <= n; ++i) p[i] = i; for(int i = 0; i <= n; ++i) sum[i] = a[i]; } int find(int v){ if(v==p[v]) return v; return (p[v]=find(p[v])); } void merge(int a, int b){ a = find(a); b = find(b); if(a != b){ if(s[a] > s[b]) swap(a, b); p[a] = b; s[b] += s[a]; sum[b] += sum[a]; } } }; int n, m, a[N]; vector<int> g[N], M[N]; vector<bool> vis, ans; pair<int, int> b[N]; int main(){ cin.tie(0); ios::sync_with_stdio(0); cin >> n >> m; for(int i = 1; i <= n; ++i) cin >> a[i]; for(int i = 1; i <= n; ++i) b[i] = {a[i], i}; for(int i = 0; i < m; ++i){ int a, b; cin >> a >> b; g[a].pb(b); g[b].pb(a); } Dsu d(n, a); sort(b + 1, b + 1 + n); ans.resize(n + 1, 0); vis.resize(n + 1, 0); for(int i = 1; i <= n; ++i){ int v = b[i].second; for(int u: g[v]){ if(vis[u]){ int co = d.find(u); if(d.sum[co] >= a[v]){ M[v].pb(u); M[u].pb(v); } } } for(int u: g[v]){ if(vis[u]){ d.merge(u, v); } } vis[v] = 1; } vis.clear(); vis.resize(n+1, 0); queue<int> q; vis[b[n].second] = ans[b[n].second] = 1; q.push(b[n].second); while(!q.empty()){ int v = q.front(); q.pop(); ans[v] = 1; for(int u: M[v]){ if(!vis[u]){ vis[u] = 1; q.push(u); } } } for(int i = 1; i <= n; ++i) cout << ans[i]; return 0; }
#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...