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;
}