#include #include #define int long long #define NMax (int) 1e5+1 using namespace std; int MIJ; int k,n; int f [NMax]; int p [NMax]; vector > G[NMax]; int BinarySearch(int lvl) { if(f[lvl] <= MIJ) return lvl; int in = 1; int sf = lvl-1; int mij; while(in <= sf) { mij = (in+sf) /2; if(f[lvl] - f[mij] <= MIJ) in = mij+1; else sf = mij-1; } return sf; } int Compute(int nod,int lvl) { int c = 0; pair edge; for(int i = 0 ;i< G[nod].size() ; i++) { edge = G[nod][i]; if(edge.first != p[nod]) { p[edge.first] = nod; f[lvl] = f[lvl-1] + edge.second; c += BinarySearch(lvl); c += Compute(edge.first,lvl+1); } } return c; } int Search() { int in = 0; int sf = 1e15; int mij,res = -1; while(in<=sf) { mij = (in+sf)/2; MIJ = mij; if( Compute(1,1) >= k) { sf = mij-1; res = mij; } else in = mij+1; } return res; } #undef int int main() { int a,b,c; cin>>n>>k; for(int i=1;i<=n-1;i++) { cin>>a>>b>>c; G[a].push_back({b,c}); G[b].push_back({a,c}); } cout<