제출 #727064

#제출 시각아이디문제언어결과실행 시간메모리
727064NeroZeinStranded Far From Home (BOI22_island)C++17
0 / 100
93 ms31636 KiB
#include <bits/stdc++.h> using namespace std; struct edge { int u, v, val; bool operator <(const edge& y) { return val < y.val; } }; const int N = 200005; int rt; int a[N]; edge e[N]; bool can[N]; vector<int> g[N]; int p[N], sz[N]; int get (int v) { return p[v] = (p[v] == v ? v : get(p[v])); } void uni (int u, int v) { int pu = get(u), pv = get(v); if (pu == pv) return; rt++; p[rt] = p[u] = p[v] = rt; //cout << " ps: " << pu << ' ' << pv << '\n'; a[rt] = a[pu] + a[pv]; //cout << " as : " << a[pu] << ' ' << a[pv] << '\n'; if (a[u] <= a[pv]) { //cout << " u : " << u << ' ' << v << '\n'; g[rt].push_back(pv); } if (a[v] <= a[pu]) { //cout << " v : " << v << ' ' << u << '\n'; g[rt].push_back(pu); } //cout << '\n'; } void Dfs (int v) { if (g[v].empty()) { can[v] = true; } for (int u : g[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] = i; sz[i] = 1; } for (int i = 0; i < m; ++i) { cin >> e[i].u >> e[i].v; e[i].val = max(a[e[i].u], a[e[i].v]); } sort(e, e + m); rt = n; for (int i = 0; i < m; ++i) { //cout << " e: " << e[i].u << ' ' << e[i].v << '\n'; uni(e[i].u, e[i].v); } Dfs(rt); for (int i = 1; i <= n; ++i) { cout << can[i]; } cout << '\n'; }
#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...