Submission #494764

#TimeUsernameProblemLanguageResultExecution timeMemory
494764dannyboy20031204Balanced Tree (info1cup18_balancedtree)C++17
0 / 100
4075 ms33208 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; vector<int> a(n); 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 = 0; i < n; i++) cin >> a[i]; auto solve2 = [&](int _c, vector<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 - 1] == _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 = inf, tar = 0; for (int i = 0; i < (1 << n); i++){ vector<int> b; for (int j = 0; j < n; j++) b.push_back(i >> j & 1); bool imp = 0; for (int i = 0; i < n; i++){ if(a[i] != b[i] and a[i] != -1) imp = 1; } if (imp) continue; int tmp = max(solve2(0, b), solve2(1, b)); if (tmp < ans){ ans = tmp; tar = i; } } if (ans >= n) return void(cout << -1 << '\n'); cout << ans << '\n'; for (int i = 0; i < n; i++) cout << (tar >> i & 1) << ' '; 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...