DontCallMeNuttoPleas

Network

Jul 17th, 2020
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. using lli=long long;
  4. vector<int> v[100100];
  5. lli dis[100100];
  6. lli par[100100];
  7.  
  8. void dfs(int p,int curr){
  9.     par[curr]=p;
  10.     dis[curr]=0;
  11.     lli cnt=0;
  12.     lli mnr=2e9;
  13.     vector<lli> a;
  14.     for(auto x:v[curr]){
  15.         if(x==p) continue;
  16.         dfs(curr,x);
  17.         mnr=min(mnr,dis[x]+1);
  18.         a.push_back(dis[x]+1);
  19.     }
  20.     sort(a.begin(),a.end());
  21.     lli s=a.size();
  22.     if(a.empty()){
  23.         dis[curr]=0;
  24.         return;
  25.     }
  26.     lli ind=mnr;
  27.     dis[curr]=mnr+s-1;
  28.     for(int i=0;i<s;i++){
  29.         if(ind<a[i]){
  30.             dis[curr]+=a[i]-ind;
  31.             ind+=a[i]-ind;
  32.         }
  33.         ind++;
  34.     }
  35. }
  36.  
  37. int main(){
  38.     int n,m;
  39.     scanf("%d%d",&n,&m);
  40.     for(int i=0;i<n-1;i++){
  41.         int x,y;
  42.         scanf("%d%d",&x,&y);
  43.         v[x].push_back(y);
  44.         v[y].push_back(x);
  45.     }
  46.     dfs(n,m);
  47.     cout << dis[m];
  48. }
Advertisement
Add Comment
Please, Sign In to add comment