Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- using lli=long long;
- vector<int> v[100100];
- lli dis[100100];
- lli par[100100];
- void dfs(int p,int curr){
- par[curr]=p;
- dis[curr]=0;
- lli cnt=0;
- lli mnr=2e9;
- vector<lli> a;
- for(auto x:v[curr]){
- if(x==p) continue;
- dfs(curr,x);
- mnr=min(mnr,dis[x]+1);
- a.push_back(dis[x]+1);
- }
- sort(a.begin(),a.end());
- lli s=a.size();
- if(a.empty()){
- dis[curr]=0;
- return;
- }
- lli ind=mnr;
- dis[curr]=mnr+s-1;
- for(int i=0;i<s;i++){
- if(ind<a[i]){
- dis[curr]+=a[i]-ind;
- ind+=a[i]-ind;
- }
- ind++;
- }
- }
- int main(){
- int n,m;
- scanf("%d%d",&n,&m);
- for(int i=0;i<n-1;i++){
- int x,y;
- scanf("%d%d",&x,&y);
- v[x].push_back(y);
- v[y].push_back(x);
- }
- dfs(n,m);
- cout << dis[m];
- }
Advertisement
Add Comment
Please, Sign In to add comment