rt,本人树型dp了解了个皮毛,打出一份男不男女不女的30pts代码
#include<iostream>
using namespace std;
struct node{
int v,id;
}l[100005];
node r[100005];
int n,q,i,xx[100005]={0},a,b,c,val[1005];
int dp[105][105][2];
int dfs(int x,int re,int c)
{
if(re<=0)return 0;
if(dp[x][re][c])
return dp[x][re][c];
if(l[x].id==0)
return 0;
dp[x][re][c]=max(dfs(l[x].id,re-1,1)+l[x].v,dfs(r[x].id,re-1,1)+r[x].v);
if(re>1)dp[x][re][c]=max(dp[x][re][c],dfs(r[x].id,re-2,1)+dfs(l[x].id,re-2,1)+l[x].v+r[x].v);
return dp[x][re][c];
}
int main()
{
cin>>n>>q;
xx[1]=1;
for(i=1;i<=n-1;i++)
{
cin>>a>>b>>c;
if(xx[a])xx[b]=1,l[a].id?(r[a].id=b,r[a].v=c):(l[a].id=b,l[a].v=c);
else xx[a]=1,l[b].id?(r[b].id=a,r[b].v=c):(l[b].id=a,l[b].v=c);
}
/*for(i=1;i<=n;i++)
{
if(l[l[i].id].id==0)
val[l[i].id]=l[i].v;
if(r[r[i].id].id==0)
val[r[i].id]=r[i].v;
}*/
//for(i=1;i<=n;i++)cout<<val[i]<<" ";
cout<<dfs(1,q,1);
}