救命
查看原帖
救命
648996
_orange_楼主2023/6/23 20:49
#include<bits/stdc++.h>
using namespace std;

int tree[101][101],n,q,dp[101][101],e[101][2];

void dfs(int node,int father,int branch){
	if(e[node][0]!=-1){
		if(dp[node][branch]>0)return;
		if(branch==0)return;
		for(int i=0;i<=branch;i++){
			if(i==0&&e[node][1]!=father)dfs(e[node][1],node,branch-1);
			if((i)&&e[node][0]!=father)dfs(e[node][0],node,branch-i-1);
		    if(i==branch&&e[node][0]!=father)dfs(e[node][0],node,branch-1);
			if((i)&&e[node][1]!=father)dfs(e[node][1],node,i-1);
			dp[node][branch]=
			max(dp[node][branch],dp[e[node][0]][branch-i-1]+dp[e[node][1]][i-1]+tree[node][e[node][0]]+tree[node][e[node][1]]);
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>q;int a,b,c;
	memset(e,-1,sizeof e);
	for(int i=1;i<n;i++){
		cin>>a>>b>>c;
		tree[a][b]=tree[b][a]=c;
		if(e[a][0]!=-1)e[a][1]=b;
		else e[a][0]=b;
		if(e[b][0]!=-1)e[b][1]=a;
		else e[b][0]=a;
	}
	dfs(1,-1,q);
	
	cout<<dp[1][q];
	return 0;
} 

一直是8pts

2023/6/23 20:49
加载中...