Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define fastio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
- #define MOD 1000000007
- #define MOD1 998244353
- #define INF 1e18
- #define nline "\n"
- #define pb push_back
- #define ppb pop_back
- #define mp make_pair
- #define ff first
- #define ss second
- #define PI 3.141592653589793238462
- #define set_bits __builtin_popcountll
- #define sz(x) ((int)(x).size())
- #define all(x) (x).begin(), (x).end()
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double lld;
- // 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
- #ifndef ONLINE_JUDGE
- #define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
- #else
- #define debug(x)
- #endif
- void _print(ll t) {cerr << t;}
- void _print(int t) {cerr << t;}
- void _print(string t) {cerr << t;}
- void _print(char t) {cerr << t;}
- void _print(lld t) {cerr << t;}
- void _print(double t) {cerr << t;}
- void _print(ull t) {cerr << t;}
- template <class T, class V> void _print(pair <T, V> p);
- template <class T> void _print(vector <T> v);
- template <class T> void _print(set <T> v);
- template <class T, class V> void _print(map <T, V> v);
- template <class T> void _print(multiset <T> v);
- template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
- template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
- template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
- template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
- template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}
- int n;
- ll k;
- vector<vector<int>>g;
- vector<vector<ll>>dp;
- vector<int>child(5001,0);
- void dfs(int u,int p){
- debug(u);
- for(int v:g[u]){
- if(v!=p){
- dfs(v,u);
- child[u]+=child[v];
- child[u]++;
- }
- }
- dp[u].resize(child[u]+2,0);
- dp[u][1]=1;
- for(int v:g[u]){
- if(v!=p){
- vector<ll>sum(child[u]+2);
- for(int num=child[u]+1;num>=1;num--){
- for(int i=0;i<=min(child[v]+1,num);i++){
- // i nodes v ke use karo
- // num-i nodes purane walo ke
- dp[u][num]+=dp[v][i]*(dp[u][num-i]);
- }
- // sum[num]+=dp[u][num];
- }
- }
- }
- debug(u);
- debug(dp[u]);
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("Error.txt", "w", stderr);
- #endif
- cin>>n>>k;
- g.resize(n+1);
- dp.resize(n+1);
- for(int i=0;i<n-1;i++){
- int u,v;
- cin>>u>>v;
- g[u].pb(v);
- g[v].pb(u);
- }
- dfs(1,-1);
- vector<ll>cnt(n+1,0);
- for(int i=1;i<=n;i++){
- dp[i].resize(n+1);
- for(int j=1;j<=n;j++){
- cnt[j]+=dp[i][j];
- }
- }
- ll sub=0;
- ll ans=-1;
- for(int i=1;i<=n;i++){
- // cout<<cnt[i]<<"\n";
- if(sub<k){
- sub+=cnt[i];
- }
- if(sub>=k){
- ans=i;
- break;
- }
- }
- cout<<ans<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement