我不知道我为啥错了,第二个点太长了(我不想看)
Code:
#include<bits/stdc++.h>
using namespace std;
int dp[1500][1500];//dp[i][j]表示以节点i为根的子树保留树根j时的最大苹果数
int n,q,dis[1500][1500];
void fatherdie(int now){
for(int i=1;i<=n;i++){
if(dis[now][i])
dis[i][now]=0,fatherdie(i);
}
}
void dfs(int now){
int left=0,right=0;
for(int i=1;i<=n;i++){
if(dis[now][i]){
if(left) right=i;
else left=i;
dfs(i);
}
}
for(int i=1;i<=q;i++){
for(int j=0;j<=i;j++){
//j,i-j
int ans=0;
if(j-1>=0) ans+=dp[left][j-1]+dis[now][left];
if(i-j-1>=0) ans+=dp[right][i-j-1]+dis[now][right];
dp[now][i]=max(dp[now][i],ans);
}
}
}
int main()
{
cin>>n>>q;
for(int i=1;i<n;i++){
int u,v,r;
cin>>u>>v>>r;
dis[u][v]=max(dis[u][v],r);
dis[v][u]=max(dis[v][u],r);
}
fatherdie(1);
dfs(1);
cout<<dp[1][q];
return 0;
}
求助!