题目链接:http://www.ifrog.cc/acm/problem/1147

题解:这题很容易想到的是边的贡献也就是每条边最多被取到几次,和点的贡献类似,那些加边只要加在边贡献大的边上就行。然后什么是边的贡献,就是一条边左右两边连着的最小的点的个数,因为这条边最多被取到这么多次。还有就是爆栈的处理具体看一下代码那个define的就是爆栈的处理如果是lunix的话那个else不需要。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cassert>
#define inf 0X3f3f3f3f
#define OPENSTACK
using namespace std;
const int M = 1e5 + ;
typedef long long ll;
struct TnT {
int v , next , w;
}edge[M << ];
struct GBA {
ll val , pos;
int num;
}GG[M];
int e , head[M] , n , k , in[M] , cnt;
ll c[M];
bool cmp(GBA x , GBA y) {
return x.num > y.num;
}
void init() {
e = , cnt = ;
memset(head , - , sizeof(head));
memset(in , , sizeof(in));
}
void add(int u , int v , int w) {
edge[e].v = v;
edge[e].w = w;
edge[e].next = head[u];
head[u] = e++;
}
ll dfs(int u , int pre) {
ll sum = ;
for(int i = head[u] ; i != - ; i = edge[i].next) {
int v = edge[i].v;
if(v == pre) continue;
ll ans = dfs(v , u);
GG[cnt].num = min(ans , (ll)n - ans), GG[cnt++].val = edge[i].w;
sum += ans;
}
return sum;
}
int main() {
#ifdef OPENSTACK
int size = << ; // 64MB
char *p = (char*)malloc(size) + size;
#if (defined _WIN64) or (defined __unix)
__asm__("movq %0, %%rsp\n" :: "r"(p));
#else
__asm__("movl %0, %%esp\n" :: "r"(p));
#endif
#endif
int t;
scanf("%d" , &t);
while(t--) {
scanf("%d%d" , &n , &k);
init();
for(int i = ; i < n ; i++) {
int u , v , w;
scanf("%d%d%d" , &u , &v , &w);
add(u , v , w);
add(v , u , w);
in[u]++, in[v]++;
}
for(int i = ; i < k ; i++) scanf("%lld" , &c[i]);
for(int i = ; i <= n ; i++) {
if(in[i] == ) {
dfs(i , -);
break;
}
}
sort(GG , GG + n , cmp);
sort(c , c + k);
reverse(c , c + k);
ll ans = ;
for(int i = ; i < k ; i++) {
ans += GG[i].num * (GG[i].val + c[i]);
}
for(int i = k ; i < cnt ; i++) ans += GG[i].num * GG[i].val;
printf("%lld\n" , ans);
}
#ifdef OPENSTACK
exit();
#else
return ;
#endif
}

最新文章

  1. 使用Jenkins配置自动化构建
  2. 推荐一款 chrome SSH 插件 - Secure Shell
  3. ThreadLocal的理解
  4. MySQL 快速导入大量数据 资料收集
  5. TF-IDF
  6. Ubuntu 16.04服务器安装及软件配置
  7. 三线程连续打印ABC
  8. LeetCode: Remove Nth Node From End of List 解题报告
  9. visual studio 中使用的插件介绍
  10. 设置GPnP profile文件中asm spfile的位置
  11. iOS ARC和MRC混编
  12. ADO.NET中ExcuteNonQuery获取存储过程Return返回值
  13. POJ 3276
  14. [Windows Phone]解锁、注册Windows Phone实体手机为开发机(Windows 8)
  15. Natas Wargame Level 16 Writeup(Content-based Blind SQL Injection)
  16. FPGA与数字信号处理
  17. SpringBoot Test集成测试
  18. pytho命名规范
  19. TCP、UDP以及HTTP的简单讲解
  20. 【实践练习一】Git以及Github的使用

热门文章

  1. Hive映射HBase表的几种方式
  2. 关于ajax异步请求的一个细节问题
  3. 通俗地说决策树算法(三)sklearn决策树实战
  4. eclipse解决properties文件中文乱码(两种方试)
  5. css公共样式 | 标签元素初始化
  6. 使用DOM4J 对xml解析操作
  7. java之异常详解
  8. 监控JVM
  9. 解决 Nginx 代理Apex慢的问题
  10. net core Webapi基础工程搭建(六)——数据库操作_Part 2