Submission #1143544

#TimeUsernameProblemLanguageResultExecution timeMemory
1143544stdfloatBalanced Tree (info1cup18_balancedtree)C++20
0 / 100
30 ms2884 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define ff first #define ss second #define pii pair<int, int> vector<int> c; vector<vector<int>> E, dp; void dfs1(int x, int p = -1) { for (auto i : E[x]) { if (i == p) continue; dfs1(i, x); dp[x][0] = min(dp[x][0], (!c[i] ? 0 : dp[i][0]) + 1); dp[x][1] = min(dp[x][1], (c[i] ? 0 : dp[i][1]) + 1); } } void dfs2(int x, int dp0 = (int)1e8, int dp1 = (int)1e8, int p = -1) { dp[x][0] = min(dp[x][0], dp0); dp[x][1] = min(dp[x][1], dp1); pii a = {-1, -1}, b = a; for (auto i : E[x]) { if (i == p) continue; if (!~a.ss || dp[a.ss][0] > dp[i][0]) a.ss = i; if (!~a.ff || dp[a.ff][0] > dp[a.ss][0]) swap(a.ff, a.ss); if (!~b.ss || dp[b.ss][1] > dp[i][1]) b.ss = i; if (!~b.ff || dp[b.ff][1] > dp[b.ss][1]) swap(b.ff, b.ss); } (c[x] ? dp1 : dp0) = 0; for (auto i : E[x]) { if (i == p) continue; int ndp0 = (a.ff != i ? a.ff : a.ss), ndp1 = (b.ff != i ? b.ff : b.ss); dfs2(i, min(dp0, (~ndp0 ? dp[ndp0][0] : (int)1e8)) + 1, min(dp1, (~ndp1 ? dp[ndp1][0] : (int)1e8)) + 1, x); } } void solve() { int n; cin >> n; E.assign(n, {}); for (int i = 1; i < n; i++) { int x, y; cin >> x >> y; x--; y--; E[x].push_back(y); E[y].push_back(x); } c.assign(n, 0); for (auto &i : c) cin >> i; dp.assign(n, vector<int>(2, (int)1e8)); dfs1(0); dfs2(0); int mx = 0; for (int i = 0; i < n; i++) mx = max(mx, dp[i][c[i]]); if (mx == (int)1e8) cout << "-1\n"; else { cout << mx << '\n'; for (auto i : c) cout << i << ' '; cout << '\n'; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) solve(); }
#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...