求调,玄关
查看原帖
求调,玄关
1610290
no_response楼主2025/7/28 17:58

70 pts,WA #1 #8 #11。

#include <bits/stdc++.h>
using namespace std;
vector <int> so[110];
int fa[110], ww[110];
int d, w, l;
int x, y;
bool flag;
void dfs1(int k, int h) {
	d = max(d, h);
	ww[h]++;
	int sizes = so[k].size();
	if (sizes == 0) {
		return;
	}
	for (int i = 0; i < sizes; i++) {
		dfs1(so[k][i], h + 1);
	}
}
void dfs2(int k, int h) {
	int sizes = so[k].size();
	if (k == y) {
		flag = 1;
		return;
	}
	if (sizes == 0) {
		return;
	}
	d = max(d, h);
	for (int i = 0; i < sizes; i++) {
		dfs2(so[k][i], h + 1);
		if (flag == 1) {
			break;
		}
		d = 0;
	}
	return;
}
int main() {
	int n;
	cin >> n;
	for (int i = 1; i < n; i++) {
		int u, v;
		cin >> u >> v;
		if (v < u) {
			swap(u, v);
		}
		so[u].push_back(v);
		fa[v] = u;
	}
	cin >> x >> y;
	for (int i = 1; i <= n; i++) {
		sort(so[i].begin(), so[i].end());
	}
	dfs1(1, 1);
	cout << d << endl;
	for (int i = 1; i <= d; i++) {
		w = max(w, ww[i]);
	}
	cout << w << endl;
	d = 0;
	int now = x;
	while (1) {
		flag = 0;
		dfs2(now, 1);
		if (flag == 1) {
			break;
		}
		l += 2;
		now = fa[now];
	}
	cout << l + d;
	return 0;
}
2025/7/28 17:58
加载中...