제출 #599501

#제출 시각아이디문제언어결과실행 시간메모리
599501SlavicGStranded Far From Home (BOI22_island)C++17
100 / 100
456 ms60664 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const int N = 2e5 + 10; ll cnt[N], p[N], c[N]; set<ll> s[N]; vector<ll> adj[N], g[N]; ll get(ll a) {return p[a] = (p[a] == a ? a : get(p[a]));} ll val[N]; void uni(ll a, ll b, ll vb) { a = get(a), b = get(b); if(a == b) return; if(cnt[a] < vb) { val[a] = 0; } p[a] = b; cnt[b] += cnt[a]; g[b].push_back(a); } int ans[N]; void dfs(int u, int cur) { cur &= val[u]; ans[u] = cur; for(int v: g[u]) { dfs(v, cur); } } int main() { int n, m; cin >> n >> m; vector<pair<ll, ll>> paiu; for(int i = 0; i < n; ++i) { cin >> c[i]; paiu.push_back({c[i], i}); } for(int i = 0; i < n; ++i) { val[i] = 1; p[i] = i; cnt[i] = c[i]; s[i].insert(i); } sort(paiu.begin(), paiu.end()); vector<bool> vis(n, false); for(int i = 0; i < m; ++i) { int u, v; cin >> u >> v; --u, --v; adj[u].push_back(v); adj[v].push_back(u); } for(int i = 0; i < n; ++i) { ll u = paiu[i].second; for(int v: adj[u]) { if(!vis[v]) continue; uni(v, u, c[u]); } vis[u] = true; } dfs(paiu[n - 1].second, 1); for(int i = 0; i < n; ++i) cout << ans[i]; }
#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...