Submission #1323073

#TimeUsernameProblemLanguageResultExecution timeMemory
1323073NValchanovStranded Far From Home (BOI22_island)C++20
0 / 100
197 ms25480 KiB
#include <iostream> #include <vector> #include <cassert> using namespace std; const int MAXN = 2e5 + 10; int n, m; int c[MAXN]; int sz[MAXN]; bool ans[MAXN]; vector < int > adj[MAXN]; void read() { cin >> n >> m; assert(m == n - 1); for(int i = 1; i <= n; i++) { cin >> c[i]; } for(int i = 1; i <= m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } } void dfs1(int u, int par) { sz[u] = c[u]; for(int v : adj[u]) { if(v == par) continue; dfs1(v, u); sz[u] += sz[v]; } } void dfs2(int u, int par) { if(par == u) ans[u] = true; else { if(sz[u] >= c[par]) ans[u] |= ans[par]; } for(int v : adj[u]) { if(v == par) continue; dfs2(v, u); } } void solve() { dfs1(1, 1); dfs2(1, 1); for(int i = 1; i <= n; i++) { cout << ans[i]; } cout << endl; } int main() { read(); solve(); 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...