Advertisement
yungyao

tioj 1947

Mar 6th, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. using namespace std;
  2. #include <vector>
  3. #include <queue>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <utility>
  7. #include <bitset>
  8. #include <set>
  9. #include <string>
  10. #include <stack>
  11. #include <iomanip>
  12. #include <map>
  13.  
  14. #define pb push_back
  15. #define pii pair<int,int>
  16. #define F first
  17. #define S second
  18. #define LL long long
  19. #define mid (LB+RB)/2
  20. #define iter(x) x.begin(),x.end()
  21.  
  22. /*
  23. yungyao so weeeeeeeeeeeeeeeeeeeeeeeeeeak
  24. 8e7 so dian
  25. FHVirus so dian
  26. youou so dian
  27. KYW so dian
  28. hubert so dian
  29. jass so dian
  30. tingyu so dian
  31. panda so dian
  32. */
  33.  
  34. //IO
  35. #include <iostream>
  36. #define theyRSOOOOOOOOODIAN ios_base::sync_with_stdio(false),cin.tie(0);
  37. #define endl '\n'
  38.  
  39. //workspace
  40.  
  41. vector <int> tree[1000100];
  42. int deg[1000100],subSize[1000100];
  43. pii mxSub[1000100];
  44.  
  45. int n;
  46. void dfs1(int x,int fr){
  47.     mxSub[x].F = x;
  48.     for (auto i:tree[x]){
  49.         if (i == fr)
  50.             continue;
  51.        
  52.         dfs1(i,x);
  53.         if (subSize[i] > mxSub[x].S)
  54.             mxSub[x] = {i,subSize[i]};
  55.         subSize[x] += subSize[i];
  56.     }
  57.     for (auto i:tree[x]){
  58.         if (i != fr){
  59.             if (n - subSize[x] > mxSub[i].S)
  60.                 mxSub[i] = {x,n-subSize[x]};
  61.         }
  62.     }
  63.     ++subSize[x];
  64. }
  65.  
  66. int dfs2(int x){
  67.     if (mxSub[x].S > n/2)
  68.         return dfs2(mxSub[x].F);
  69.     return mxSub[x].S;
  70. }
  71.  
  72. int main(){
  73.     theyRSOOOOOOOOODIAN
  74.     cin >> n;
  75.     for (int i=1;i<n;++i){
  76.         int u,v;
  77.  
  78.         cin >> u >> v;
  79.         ++deg[u];
  80.         ++deg[v];
  81.         tree[u].pb(v);
  82.         tree[v].pb(u);
  83.     }
  84.  
  85.     for (int i=0;;++i){
  86.         if (deg[i] == 1){
  87.             dfs1(i,-1);
  88.             cout << dfs2(i) << '\n';
  89.             break;
  90.         }
  91.     }
  92.  
  93.     //for (int i=0;i<n;++i) cout << i << ' ' << mxSub[i].F << ' ' << mxSub[i].S << '\n';
  94.  
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement