#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e7;
ll n,a,b,x,y,check[300005],trace[300005],c,dist[300005],canh,moc,pos=-1,hao,res=mod;
vector<ll> ed[300005],pa,dp[300005];
void dfs(int u)
{
check[u]=1;
for (auto it: ed[u])
{
if (check[it]==0)
{
dfs(it);
trace[it]=u;
}
}
}
void dpontree(int u,int v)
{
dist[u]=0;
if (u==v) return;
check[u]=1;
for (auto it: ed[u])
{
if (check[it]==0)
{
dpontree(it,v);
dp[u].push_back(dist[it]);
}
}
sort(dp[u].begin(),dp[u].end());
canh=0;
moc=1;
for (int i=dp[u].size()-1;i>=0;--i)
{
canh=max(canh,dp[u][i]+moc);
moc++;
}
dist[u]=canh;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin>>n>>a>>b;
c=b;
for (int i=1;i<n;++i)
{
cin>>x>>y;
ed[x].push_back(y);
ed[y].push_back(x);
}
dfs(a);
while (b!=0)
{
pa.push_back(b);
b=trace[b];
}
b=c;
int l=0,r=pa.size()-2;
while (l<=r)
{
int mid=(l+r)/2;
for (int i=1;i<=n;++i) dp[i].clear();
memset(check,0,sizeof(check));
dpontree(b,pa[mid+1]);
dpontree(a,pa[mid]);
res=min(res,max(dist[b],dist[a]));
if (dist[b]<=dist[a])
{
l=mid+1;
}
else r=mid-1;
}
// if (pos==-1)
// {
// for (int i=1;i<=n;++i) dp[i].clear();
// memset(check,0,sizeof(check));
// dpontree(b,pa[1]);
// cout<<dist[b];
// return 0;
// }
// else
// {
// for (int i=1;i<=n;++i) dp[i].clear();
// memset(check,0,sizeof(check));
// dpontree(b,pa[pos+1]);
// dpontree(a,pa[pos]);
// hao=dist[a];
// if (pos+2<pa.size())
// {
// for (int i=1;i<=n;++i) dp[i].clear();
// memset(check,0,sizeof(check));
// dpontree(b,pa[pos+2]);
// dpontree(a,pa[pos+1]);
// hao=min(hao,dist[b]);
// }
// cout<<hao;
// return 0;
// }
cout<<res;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
19544 KB |
Output is correct |
2 |
Correct |
4 ms |
19548 KB |
Output is correct |
3 |
Correct |
5 ms |
19544 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
355 ms |
39136 KB |
Output is correct |
2 |
Correct |
358 ms |
40372 KB |
Output is correct |
3 |
Correct |
301 ms |
40540 KB |
Output is correct |
4 |
Correct |
287 ms |
40912 KB |
Output is correct |
5 |
Correct |
303 ms |
39020 KB |
Output is correct |
6 |
Correct |
290 ms |
39112 KB |
Output is correct |
7 |
Correct |
250 ms |
41460 KB |
Output is correct |