30pts求hack
查看原帖
30pts求hack
1284815
canwen楼主2025/7/23 18:06
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>
using namespace std;

#define int long long
//#define getchar getchar_unlocked
//#define putchar putchar_unlocked
#define pc putchar
int in(){
	char a=getchar();int k=0,kk=1;
	while(!(a>='0'&&a<='9')) {if(a == '-') kk = -1;a = getchar();}
	while(a>='0'&&a<='9') k = k*10 + a - '0', a = getchar();
	return k*kk;
}
void out(int a){
	if(a < 0) pc('-'), a= -a;
	if(a > 9) out(a/10);
	pc('0'+a%10);
}
#define fst first
#define snd second
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _rrep(i,a,b) for(int i=(a);i>=(b);--i)
#define _reps(i,a,b,c) for(int i=(a);i<=(b);c)
#define _rreps(i,a,b,c) for(int i=(a);i>=(b);c)
#define _graph(i) for(int i=head[u];i;i=e[i].nxt)
#define mp make_pair
#define pint pair<int,int>
#define i128 __int128
#define i64 long long
#define pb emplace_back
#define FRR(file) freopen(file,"r",stdin)
#define FRW(file) freopen(file,"w",stdout)
#define nowtime (double)clock()/CLOCKS_PER_SEC
const int N = 105, inf = 1e18;
int n,Q,head[N],tot,f[N][N];
struct node{
	int nxt,v,w;
}e[N*2];
void add(int u,int v,int w){
	e[++tot].v=v,e[tot].nxt=head[u],head[u]=tot,e[tot].w=w;
}

void dfs(int u,int fa){
	_graph(i){
		int v = e[i].v;
		if(v != fa){
			dfs(v,u);
			f[u][1] = max(f[u][1],e[i].w);
		}
	}
	_graph(i){
		int v = e[i].v;
		if(v == fa) continue;
		for(int j=1;j<=Q-1;++j){
			for(int w=Q;w>j;--w){
				f[u][w] = max(f[u][w],f[u][w-j-1]+f[v][j]+e[i].w);
			}
		}
	}
//	_rep(i,1,Q){
//		cout << u << " " << i << " " <<  f[u][i] << "\n";
//	}
}
signed main(){
	n = in(), Q = in();
	_rep(i,1,n-1){
		int u=in(),v=in(),w=in();
		add(u,v,w), add(v,u,w);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=Q;++j){
			f[i][j] = -inf;
		}
	}
	dfs(1,0);
	out(f[1][Q]);
	return 0;
}
2025/7/23 18:06
加载中...