제출 #727156

#제출 시각아이디문제언어결과실행 시간메모리
727156NeroZeinStranded Far From Home (BOI22_island)C++17
100 / 100
207 ms34668 KiB
#include <bits/stdc++.h> using namespace std; const int N = 200005; int a[N]; int p[N]; bool s[N]; bool ans[N]; long long sum[N]; vector<int> g[N]; vector<int> sons[N]; int get (int v) { if (p[v] < 0) return v; return p[v] = get(p[v]); } void Dfs (int v) { ans[v] = true; for (int u : sons[v]) { Dfs(u); } } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; for (int i = 1; i <= n; ++i) { cin >> a[i]; p[i] = -1; sum[i] = a[i]; } for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } vector<int> ord(n); iota(ord.begin(), ord.end(), 1); sort(ord.begin(), ord.end(), [&](int u, int v) { return a[u] < a[v]; }); for (int i = 0; i < n; ++i) { int v = ord[i]; s[v] = true; for (int u : g[v]) { u = get(u); if (!s[u] || u == v) { continue; } if (sum[u] >= a[v]) { sons[v].push_back(u); } sum[v] += sum[u]; p[u] = v; } } Dfs(ord.back()); for (int i = 1; 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...