Submission #1141930

#TimeUsernameProblemLanguageResultExecution timeMemory
1141930stdfloatBalanced Tree (info1cup18_balancedtree)C++20
0 / 100
4093 ms3576 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; void solve() { int n; cin >> n; vector<int> E[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); } vector<int> c(n); for (auto &i : c) cin >> i; int l = 1, r = n; while (l <= r) { int md = (l + r) >> 1; bool tr = true; for (int i = 0; i < n && tr; i++) { queue<int> q; bool ok = false; vector<int> dis(n, -1); q.push(i); dis[i] = 0; while (!q.empty() && !ok) { int x = q.front(); q.pop(); for (auto j : E[x]) { if (dis[x] < md && !~dis[j]) { if (c[i] == c[j]) { ok = true; break; } q.push(j); dis[j] = dis[x] + 1; } } } tr = ok; } if (!tr) l = md + 1; else r = md - 1; } if (l == n + 1) cout << "-1\n"; else { cout << l << '\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...