#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define getrp() ({char*mmap();mmap(0l,1l<<25,1,2,0,0ll);}) #define rd() ({int _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;}) #define wt(v) ({unsigned _z=v;do*--wp=_z%10+48;while(_z/=10);}) #define wt1(v) ({char wbuf[64],*wp=wbuf+sizeof wbuf;wt(v);write(1,wp,wbuf+sizeof wbuf-wp);}) #define rep(v,e) for(typeof(e) v=0;v=a?v:a) #define MAXV 100 int ab[MAXV-1<<1],c[MAXV-1]; int k,t; int d[100001]; int en[MAXV+1]; int eb[MAXV-1<<1]; int ew[MAXV-1<<1]; int f(int i,int p){ int x=0; int w=0; rep3(k,en[i],en[i+1]){ int j=eb[k]; if(j!=p){ w+=f(j,i); }else{ x=ew[k]; } } w+=!w; int y=x*w; rrep(i,k+1-x){ chmax(d[i+x],d[i]+y); } t+=y; return w; } int main(){ char*rp=getrp(); int n=rd(); k=rd(); rep(j,n-1){ ++en[ab[j*2+0]=rd()-1]; ++en[ab[j*2+1]=rd()-1]; c[j]=rd(); } rep(i,n){ en[i+1]+=en[i]; } rrep(j,n-1<<1){ int k=--en[ab[j]]; eb[k]=ab[j^1]; ew[k]=c[j>>1]; } f(0,0); wt1(t+d[k]); _exit(0); }