Submission #601017

#TimeUsernameProblemLanguageResultExecution timeMemory
601017alextodoranStranded Far From Home (BOI22_island)C++17
0 / 100
209 ms27992 KiB
/** ____ ____ ____ ____ ____ ||a |||t |||o |||d |||o || ||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\| **/ #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N_MAX = 200000; int N, M; int weight[N_MAX + 2]; vector <int> adj[N_MAX + 2]; int order[N_MAX + 2]; int root[N_MAX + 2]; ll sum[N_MAX + 2]; int findRoot (int u) { return (root[u] == 0 ? u : root[u] = findRoot(root[u])); } bool seen[N_MAX + 2]; vector <int> sons[N_MAX + 2]; bool answer[N_MAX + 2]; void dfs (int u, int parent = 0) { answer[u] = true; for (int v : sons[u]) { if (v != parent) { dfs(v, u); } } } int main () { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N >> M; for (int u = 1; u <= N; u++) { cin >> weight[u]; } for (int i = 1; i <= M; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } iota(order + 1, order + N + 1, 1); sort(order + 1, order + N + 1, [&] (const int &u, const int &v) { return weight[u] < weight[v]; }); copy(weight + 1, weight + N + 1, sum + 1); for (int i = 1; i <= N; i++) { int u = order[i]; seen[u] = true; for (int v : adj[u]) { if (seen[v] == true) { v = findRoot(v); if (v != u) { if (sum[v] >= weight[u]) { sons[u].push_back(v); } root[v] = u; sum[u] += weight[v]; } } } } dfs(order[N]); for (int u = 1; u <= N; u++) { cout << answer[u]; } cout << "\n"; 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...