参考了http://www.bubuko.com/infodetail-1276416.html

首先是逆向思维, 向把每条边看作一条路径, 然后再去合并

然后我们讨论怎么样合并时最优的

我们讨论当前的点u

那么首先直观感受, 因为如果要合并一次, 就需要两条边,

所以最多可以合并的不会超过度数(与其相连的边的总权值)的一半。

但这只是直观感受, 并不是所有的情况都可以合并的了这么多。

当与当前点相连的边中有一条边的权值大于度数的一半的时候, 不能合并

这么多。

比如说连了两条边, 一条边权值为5, 一条为7, 那么显然只能合并5

次, 而度数的一半是6.

再准确的一点来说, 如果当前边的权值大于度数的一半, 那么最优的做法

就是从这条边向其他所有的边合并, 这样能合并的次数是最多的。

如果这条边以外的两条边合并了,只合并一次, 还不如这条边和另外两条边

合并两次, 合并次数更多, 而且反正这条边到最后权值还是有剩的。

因为这条边和其他所有边合并,所以合并的次数就是剩下所有边的权值。

原理讲完了,看代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 112345;
int degree[MAXN], maxw[MAXN], n; int main()
{
int T, kase = 0;
scanf("%d", &T); while(T--)
{
memset(degree, 0, sizeof(degree));
memset(maxw, 0, sizeof(maxw)); int ans = 0;
scanf("%d", &n);
REP(i, 0, n - 1)
{
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
u--; v--;
degree[u] += w; degree[v] += w;
maxw[u] = max(maxw[u], w);
maxw[v] = max(maxw[v], w);
ans += w;
} REP(u, 0, n)
{
if((maxw[u] << 1) <= degree[u]) ans -= degree[u] >> 1;
else ans -= degree[u] - maxw[u];
}
printf("Case #%d: %d\n", ++kase, ans);
} return 0;
}

最新文章

  1. Problem with WinRM on Exchange 2013 Management Shell and Exchange Toolbox on a new exchange 2013 with CAFE and BE on single server installation
  2. windows7 自带l2tp/ipsec VPN客户端连接Cisco ASA
  3. Android面试题整理【转载】
  4. 让div变得大方美观 bootstrap
  5. hdu 2079 选课时间
  6. HDU5643-King&#39;s Game
  7. 【Unity Shaders】使用CgInclude让你的Shader模块化——创建CgInclude文件存储光照模型
  8. POJ 1845 Sumdiv(因子分解+快速幂+二分求和)
  9. ALV 数值列负号前置 (EDIT_MASK应用)
  10. crawler_基础之_java.net.HttpURLConnection 访问网络资源
  11. angular : direative : scope | 指令scope里的符号@,=
  12. shiro权限控制
  13. js X年X周 转成 具体日期
  14. 【原创】那些年用过的Redis集群架构(含面试解析)
  15. shell编程之转义和引用
  16. Tomcat 或JBOSS java.lang.ArrayIndexOutOfBoundsException: 8192 解决方案【转】
  17. 内存的一些magic number和debug crt(0xCCCCCCCC和0xCDCDCDCD,debug版本的CRT为了方便调试程序的初始值)
  18. java.sql.SQLException: ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB
  19. 【转】oracle中的游标的原理和使用详解
  20. JQuery插件模板

热门文章

  1. Python 函数部分练习题
  2. 并发编程——全局解释器锁GIL
  3. 【WPF】这可能是全网最全的拖拽实现方法的总结
  4. Centos 6/7 忘记root密码处理方法
  5. poi生成word2007及以上文件
  6. WinServer-IIS-URL重写
  7. HDU 4331 Contest 4
  8. weblogic部署struts2项目訪问action404错误
  9. 实现 jstl标签foreach 功能
  10. React-Native系列Android——Native与Javascript通信原理(一)