记录编号 590931 评测结果 AAAAAAAAAA
题目名称 [HAOI 2015]树上染色 最终得分 100
用户昵称 Gravatarflyfree 是否通过 通过
代码语言 C++ 运行时间 0.124 s
提交时间 2024-07-13 14:29:58 内存使用 8.32 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define MAXN 2010
  5. #define MAXM 5010
  6. ll dp[MAXN][MAXN],siz[MAXN],pro[MAXN][MAXN];
  7. ll hd[MAXM],nxt[MAXM],ed[MAXM],val[MAXM];
  8. ll n,m,k,idx;
  9. void build(int x,int y,long long z){
  10. nxt[++idx]=hd[x];
  11. hd[x]=idx;
  12. ed[idx]=y;
  13. val[idx]=z;
  14. }
  15. void dfs(int now,int fa){
  16. // siz[now]++;
  17. dp[now][0]=0,dp[now][1]=0;
  18. siz[now]++;
  19. for(int i=hd[now];i;i=nxt[i]){
  20. int y=ed[i];
  21. if(y!=fa){
  22. dfs(y,now);
  23. for(ll j=siz[now];j>=0;j--){
  24. for(int u=siz[y];u>=0;u--){
  25. dp[now][j+u]=max(dp[now][j+u],dp[y][u]+dp[now][j]+val[i]*(k-u)*u+val[i]*(m-siz[y]+u)*(siz[y]-u));
  26. }
  27. }
  28. siz[now]+=siz[y];
  29. }
  30. }
  31. // dp[now][min(siz[now],k)]=dp[now][min(siz[now],k)-1];
  32. }
  33. int main(){
  34. freopen("haoi2015_t1.in","r",stdin);
  35. freopen("haoi2015_t1.out","w",stdout);
  36. scanf("%d%d",&n,&k);
  37. m=n-k;
  38. for(int i=1;i<n;i++){
  39. int x,y;
  40. long long z;
  41. scanf("%d%d%lld",&x,&y,&z);
  42. build(x,y,z);
  43. build(y,x,z);
  44. }
  45. dfs(1,1);
  46. printf("%lld",dp[1][k]);
  47. return 0;
  48. }