#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
#define maxn 200005 struct Edge{
int to,next,c;
}edge[maxn<<];
int dp[maxn],f[maxn],vis[maxn],degree[maxn],head[maxn],tot;
void addedge(int u,int v,int c){
edge[tot].to=v;
edge[tot].c=c;
edge[tot].next=head[u];
head[u]=tot;
tot++;
} void DP(int u){
vis[u]=;dp[u]=;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].to;
if(vis[v]) continue;
DP(v);
if(degree[v]==) dp[u]+=edge[i].c;//分两种情况,叶子节点和非叶子结点
else dp[u]+=min(edge[i].c,dp[v]);
}
}
void dfs(int u){
vis[u]=;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].to;
if(vis[v]) continue;
if(degree[u]==)//分两种情况
f[v]=dp[v]+edge[i].c;//u只有v一个子节点
else
f[v]=dp[v]+min(edge[i].c,f[u]-min(dp[v],edge[i].c));//除了v外的其他节点
dfs(v);
}
}
int main(){
int t,u,v,c,n;
scanf("%d",&t);
while(t--){
memset(head,-,sizeof head);
memset(degree,,sizeof degree);
tot=;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d%d%d",&u,&v,&c);
addedge(u,v,c);
addedge(v,u,c);
degree[u]++,degree[v]++;
} int root=,ans=;
memset(vis,,sizeof vis);
DP(root);
f[root]=dp[root];
memset(vis,,sizeof vis);
dfs(root);
for(int i=;i<=n;i++)
ans=max(ans,f[i]);
printf("%d\n",ans);
}
}

最新文章

  1. 5-sql查询
  2. [AlwaysOn Availability Groups]排查:AG配置
  3. 延迟容忍网络(Delay-tolerant networking)
  4. ECMAScript数组常用
  5. OpenCV进阶之路:一个简化的视频摘要程序
  6. centos7防火墙那些事
  7. leetcode第21题--Generate Parentheses
  8. JavaScript中Array.prototype.sort()的详解
  9. Python之MRO及其C3算法
  10. 在Vue2.0中集成UEditor 富文本编辑器
  11. C语言题库----指针
  12. linux下目录简介——/proc
  13. L1-048. 矩阵A乘以B
  14. Atcode ABC105-C:Base -2 Number
  15. CentOS7安装OpenStack(Rocky版)-08.启动一个虚拟机实例
  16. 剑指offer五十二之正则表达式匹配
  17. 规范大于编码-我的javaWeb开发规范
  18. poj 1273 Drainage Ditches 网络流最大流基础
  19. jquery设置按钮disabled
  20. CH5401 没有上司的舞会【树形DP】

热门文章

  1. 修改sqlarchemy源码使其支持jdbc连接mysql
  2. Xen的入门到放弃
  3. Linux实战型企业运维工程师试题测评
  4. Linux记录-AWK语法(转载)
  5. Study 5 —— CSS概述
  6. unity引用查找插件-ReferenceFinder
  7. vue中$mount与el区别
  8. git回滚远程仓库代码/错提master分支的恢复
  9. Linux - 文件ACL权限控制
  10. [HEOI2015]定价 (贪心)