这道题如何把边权转化为点权
查看原帖
这道题如何把边权转化为点权
218999
啷里个浪楼主2020/12/8 19:40

求助:按样例输入最后结果是40(只选择了2、5),应该怎么改

#include<bits/stdc++.h>
using namespace std;
int head[105],f[105][105],m,n,cnt,num[105];
struct node{
	int to,next;
}a[500];
void add(int x,int y){
	cnt++;
	a[cnt].to =y;
	a[cnt].next =head[x];
	head[x]=cnt;
}
void dfs(int start){
	for(int i=head[start];i;i=a[i].next ){
		int c=a[i].to ;
		dfs(c);
		for(int j=m;j>=1;j--){
			for(int g=j-1;g>=1;g--){
				f[start][j]=max(f[start][j],f[start][j-g]+f[c][g]);
			}
		}
	}
}
int main(){
	head[1]=0;
	cin>>n>>m;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		if(x>y)swap(x,y);
		cin>>f[y][1];
		add(x,y);
	}
	m++;
	dfs(1);
	cout<<f[1][m];
	return 0;
}
2020/12/8 19:40
加载中...