社区讨论
38分求调
P2015二叉苹果树参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjs6vta
- 此快照首次捕获于
- 2025/11/04 07:38 4 个月前
- 此快照最后确认于
- 2025/11/04 07:38 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
struct e{
int v,w;
};
struct node{
int father;
vector<e>son;
}tree[150];
int n,q,dp[150][150],cnt[150];
void dfs(int root){
int son1=0,son2=0,son1w=0,son2w=0;
for(int i=0;i<tree[root].son.size();++i){
e son=tree[root].son[i];
dfs(son.v);
if(son1){
son2=son.v;
son2w=son.w;
}else{
son1=son.v;
son1w=son.w;
}
cnt[root]+=cnt[son.v]+1;
}
//printf("%d %d %d %d\n",son1,son1w,son2,son2w);
if(son1==0&&son2==0)return;
for(int i=0;i<=cnt[root];++i){
for(int l=0;l<=i;++l){
int x=0,y=0,r=i-l;
if(l>0)x=son1w+dp[son1][l-1];
if(r>0)y=son2w+dp[son2][r-1];
dp[root][l+r]=max(dp[root][l+r],x+y);
}
}
}
int main(){
tree[1].father=1;
scanf("%d%d",&n,&q);
for(int i=1;i<n;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(tree[u].father){
tree[v].father=u;
tree[u].son.push_back((e){v,w});
}else{
tree[u].father=v;
tree[v].son.push_back((e){u,w});
}
}
dfs(1);
//for(int i=1;i<=n;++i)printf("%d\n",cnt[i]);
/*
for(int i=1;i<=n;++i){
for(int j=0;j<=cnt[i];++j)printf("%d ",dp[i][j]);
printf("\n");
}
*/
printf("%d",dp[1][q]);
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...