CF1975D 题解
DeepSeekR1 · · 题解
发现
如果
那么就让
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a,b;
vector <int> e[200005];
int ans,d[200005],fa[200005];
bool vis[200005];
void f (int x) {
vis[x] = 1;
for (auto at : e[x]) {
if (vis[at]) {
continue;
}
d[at] = d[x] + 1;
fa[at] = x;
f(at);
}
return;
}
void v (int x) {
vis[x] = 1;
for (auto at : e[x]) {
if (vis[at]) {
continue;
}
d[at] = d[x] + 1;
v(at);
}
return;
}
signed mian () {
cin >> n;
cin >> a >> b;
for (int i = 1;i < n;i++) {
int u,v;
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
fa[a] = a;
f(a);
int r = b;
for (int i = 1;i <= (d[b] + 1) / 2;i++) {
r = fa[r];
}
for (int i = 1;i <= n;i++) {
vis[i] = 0;
d[i] = 0;
}
v(r);
ans = (n - 1) * 2 + d[b];
int mx = -1;
for (int i = 1;i <= n;i++) {
mx = max(mx,d[i]);
}
ans -= mx;
cout << ans << endl;
return 0;
}
signed main () {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin >> T;
while (T--) {
mian();
for (int i = 1;i <= n;i++) {
e[i].clear();
vis[i] = 0;
d[i] = 0;
fa[i] = 0;
}
ans = 0;
}
return 0;
}