This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define all(s) s.begin(),s.end()
#define F first
#define S second
using namespace std;
typedef int ll;
ll n,a,b,x,y,dp[300009],pp[300009],ans=1e9;
vector<vector<ll> >v;
vector<ll>bin;
inline void dfs(ll d,ll p)
{
pp[d]=p;
for(auto&z:v[d])
if(z!=p)
dfs(z,d);
}
inline void best(ll d,ll p)
{
dp[d]=0;
vector<ll>o;
for(auto&z:v[d])
{
if(z==p||(d==x&&z==y)||(d==y&&z==x))
continue;
best(z,d);
o.push_back(dp[z]);
}
sort(all(o),greater<ll>());
for(ll i=0; i<o.size(); i++)
dp[d]=max(dp[d],o[i]+i+1);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>a>>b;
v.resize(n+1);
for(ll i=1; i<n; i++)
{
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
dfs(a,0);
x=b;
while(x)
{
bin.push_back(x);
x=pp[x];
}
reverse(all(bin));
for(ll i=0;i<bin.size()-1;i++)
{
x=bin[i];
y=bin[i+1];
best(a,0);
best(b,0);
ans=min(ans,max(dp[a],dp[b]));
}
cout<<ans;
return 0;
}
Compilation message (stderr)
torrent.cpp: In function 'void best(ll, ll)':
torrent.cpp:29:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | for(ll i=0; i<o.size(); i++)
| ~^~~~~~~~~
torrent.cpp: In function 'int main()':
torrent.cpp:52:17: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
52 | for(ll i=0;i<bin.size()-1;i++)
| ~^~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |