Submission #1142519

#TimeUsernameProblemLanguageResultExecution timeMemory
1142519stdfloatBalanced Tree (info1cup18_balancedtree)C++20
0 / 100
4091 ms3636 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...