Submission #494763

#TimeUsernameProblemLanguageResultExecution timeMemory
494763dannyboy20031204Balanced Tree (info1cup18_balancedtree)C++17
13 / 100
535 ms40832 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define mp make_pair using namespace std; void db() {cout << endl;} template <typename T, typename ...U> void db(T a, U ...b) { //return; cout << a << ' ', db(b...); } #ifdef Cloud #define file freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout) #else #define file ios::sync_with_stdio(false); cin.tie(0) #endif const int N = 3001, inf = 1e9 + 1; void solve(){ int n; cin >> n; int c[n + 1]; vector<int> g[n + 1]; for (int i = 0; i < n - 1; i++){ int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } for (int i = 1; i <= n; i++) cin >> c[i]; auto solve2 = [&](int _c){ queue<int> q; int dis[n + 1]{}, vis[n + 1]{}, mi[n + 1], par[n + 1]{}; for (int &i : mi) i = inf; for (int i = 1; i <= n; i++) if (c[i] == _c) { vis[i] = 1; par[i] = i; q.push(i); } while (!q.empty()){ int u = q.front(); q.pop(); for (int i : g[u]){ if (par[i] == par[u]) continue; if (vis[i]){ mi[par[u]] = min(mi[par[u]], dis[u] + dis[i] + 1); mi[par[i]] = min(mi[par[i]], dis[u] + dis[i] + 1); } else{ dis[i] = dis[u] + 1; vis[i] = 1; par[i] = par[u]; q.push(i); } } } int ans = 0; for (int i = 1; i <= n; i++) if (par[i] == i) ans = max(ans, mi[i]); return ans; }; int ans = max(solve2(0), solve2(1)); if (ans >= n) return void(cout << -1 << '\n'); cout << ans << '\n'; for (int i = 1; i <= n; i++) cout << c[i] << ' '; cout << '\n'; } signed main(){ file; 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...