Submission #668158

#TimeUsernameProblemLanguageResultExecution timeMemory
668158Sohsoh84Stranded Far From Home (BOI22_island)C++17
100 / 100
488 ms183620 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 1e6 + 10; const ll LOG = 20; const ll INF = 2e18; // use sz instead of n :/ ll P[MAXN], n, m, F[MAXN], sz, val[MAXN], par[MAXN][LOG], W[MAXN][LOG], S[MAXN]; vector<int> C[MAXN]; vector<pair<int, pll>> edges; inline bool unite(int u, int v, int w) { u = P[u], v = P[v]; if (u == v) return false; if (C[u].size() < C[v].size()) swap(u, v); sz++; par[F[u]][0] = par[F[v]][0] = sz; W[F[u]][0] = W[F[v]][0] = w; S[sz] = S[F[u]] + S[F[v]]; F[u] = sz; for (int e : C[v]) { P[e] = u; C[u].push_back(e); } C[v].clear(); return true; } inline int try_up(int v, ll val) { for (int i = LOG - 1; i >= 0; i--) if (W[v][i] <= val) v = par[v][i]; return v; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> val[i]; C[i] = {i}; P[i] = F[i] = i; S[i] = val[i]; sz++; } for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; edges.push_back({int(max(val[v], val[u])), {u, v}}); } sort(all(edges)); for (auto [w, e] : edges) unite(e.X, e.Y, w); fill(W[0], W[0] + LOG, INF); W[sz][0] = INF; for (int i = 1; i < LOG; i++) { for (int v = 1; v <= sz; v++) { int p = par[v][i - 1]; par[v][i] = par[p][i - 1]; W[v][i] = W[p][i - 1]; } } for (int i = 1; i <= n; i++) { int v = i; while (W[v][0] <= S[v]) v = try_up(v, S[v]); cout << (v == sz ? 1 : 0); } cout << endl; 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...