Advertisement
devesh_7

Kth Subtree

Aug 6th, 2023 (edited)
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5.  
  6.  
  7. #define fastio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
  8. #define MOD 1000000007
  9. #define MOD1 998244353
  10. #define INF 1e18
  11. #define nline "\n"
  12. #define pb push_back
  13. #define ppb pop_back
  14. #define mp make_pair
  15. #define ff first
  16. #define ss second
  17. #define PI 3.141592653589793238462
  18. #define set_bits __builtin_popcountll
  19. #define sz(x) ((int)(x).size())
  20. #define all(x) (x).begin(), (x).end()
  21.  
  22. typedef long long ll;
  23. typedef unsigned long long ull;
  24. typedef long double lld;
  25. // typedef tree<pair<int, int>, null_type, less<pair<int, int>>, rb_tree_tag, tree_order_statistics_node_update > pbds; // find_by_order, order_of_key
  26.  
  27. #ifndef ONLINE_JUDGE
  28. #define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
  29. #else
  30. #define debug(x)
  31. #endif
  32.  
  33. void _print(ll t) {cerr << t;}
  34. void _print(int t) {cerr << t;}
  35. void _print(string t) {cerr << t;}
  36. void _print(char t) {cerr << t;}
  37. void _print(lld t) {cerr << t;}
  38. void _print(double t) {cerr << t;}
  39. void _print(ull t) {cerr << t;}
  40.  
  41. template <class T, class V> void _print(pair <T, V> p);
  42. template <class T> void _print(vector <T> v);
  43. template <class T> void _print(set <T> v);
  44. template <class T, class V> void _print(map <T, V> v);
  45. template <class T> void _print(multiset <T> v);
  46. template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
  47. template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  48. template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  49. template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  50. template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}
  51. int n;
  52. ll k;
  53. vector<vector<int>>g;
  54. vector<vector<ll>>dp;
  55. vector<int>child(5001,0);
  56. void dfs(int u,int p){
  57.     debug(u);
  58.     for(int v:g[u]){
  59.         if(v!=p){
  60.             dfs(v,u);
  61.             child[u]+=child[v];
  62.             child[u]++;
  63.         }
  64.     }
  65.     dp[u].resize(child[u]+2,0);
  66.     dp[u][1]=1;
  67.     for(int v:g[u]){
  68.         if(v!=p){
  69.             vector<ll>sum(child[u]+2);        
  70.             for(int num=child[u]+1;num>=1;num--){
  71.                 for(int i=0;i<=min(child[v]+1,num);i++){
  72.                     // i nodes v ke use karo
  73.                     // num-i nodes purane walo ke
  74.                     dp[u][num]+=dp[v][i]*(dp[u][num-i]);
  75.                 }
  76.                 // sum[num]+=dp[u][num];
  77.             }    
  78.         }
  79.     }
  80.     debug(u);
  81.     debug(dp[u]);
  82.  
  83.    
  84.  
  85. }
  86. int main() {
  87. #ifndef ONLINE_JUDGE
  88.     freopen("Error.txt", "w", stderr);
  89. #endif
  90.     cin>>n>>k;
  91.     g.resize(n+1);
  92.     dp.resize(n+1);
  93.     for(int i=0;i<n-1;i++){
  94.         int u,v;
  95.         cin>>u>>v;
  96.         g[u].pb(v);
  97.         g[v].pb(u);
  98.     }
  99.     dfs(1,-1);
  100.     vector<ll>cnt(n+1,0);
  101.     for(int i=1;i<=n;i++){
  102.         dp[i].resize(n+1);
  103.         for(int j=1;j<=n;j++){
  104.             cnt[j]+=dp[i][j];
  105.         }
  106.     }
  107.     ll sub=0;
  108.     ll ans=-1;
  109.     for(int i=1;i<=n;i++){
  110.         // cout<<cnt[i]<<"\n";
  111.         if(sub<k){
  112.             sub+=cnt[i];
  113.         }
  114.         if(sub>=k){
  115.             ans=i;
  116.             break;
  117.         }
  118.     }
  119.     cout<<ans<<"\n";
  120.  
  121.  
  122.  
  123.    
  124.  
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement