1. /*
  2. 因为权值都是正的, 所以贪心的正确性能保证
  3. 然后重链贪心跑一下就好了
  4. */
  5. #include<cstdio>
  6. #include<algorithm>
  7. #include<cstring>
  8. #include<queue>
  9. #include<iostream>
  10. #define ll long long
  11. #define M 200010
  12. #define mmp make_pair
  13. using namespace std;
  14. int read() {
  15. int nm = 0, f = 1;
  16. char c = getchar();
  17. for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
  18. for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
  19. return nm * f;
  20. }
  21. vector<int> to[M];
  22. ll ver[M], sta[M], tp, top[M], son[M], n, k;
  23. void dfs(int now, int fa) {
  24. for(int i = 0; i < to[now].size(); i++) {
  25. int vj = to[now][i];
  26. if(vj == fa) continue;
  27. dfs(vj, now);
  28. if(ver[vj] > ver[son[now]]) son[now] = vj;
  29. }
  30. ver[now] += ver[son[now]];
  31. }
  32. void dfss(int now, int fa) {
  33. if(top[now] == now) sta[++tp] = ver[now];
  34. if(son[now]) {
  35. top[son[now]] = top[now];
  36. dfss(son[now], now);
  37. }
  38. for(int i = 0; i < to[now].size(); i++) {
  39. int vj = to[now][i];
  40. if(vj == fa || vj == son[now]) continue;
  41. top[vj] = vj;
  42. dfss(vj, now);
  43. }
  44. }
  45. int main() {
  46. n = read(), k = read();
  47. for(int i = 1; i <= n; i++) ver[i] = read();
  48. for(int i = 1; i < n; i++) {
  49. int vi = read(), vj = read();
  50. to[vi].push_back(vj);
  51. to[vj].push_back(vi);
  52. }
  53. dfs(1, 1);
  54. top[1] = 1;
  55. dfss(1, 1);
  56. sort(sta + 1, sta + tp + 1, greater<ll>() );
  57. ll ans = 0;
  58. for(int i = 1; i <= k; i++) ans += sta[i];
  59. cout << ans << "\n";
  60. return 0;
  61. }

bzoj3252: 攻略(贪心)的更多相关文章

  1. BZOJ3252 攻略 贪心、长链剖分

    传送门 给树竟直接给父子关系!!!真良心 首先一个贪心策略:每一次选择的链一定是所有链中权值最大的.这应该比较显然 那么我们接下来考虑如何维护这个贪心.我们可以使用长链剖分进行维护,对权值进行长链剖分 ...

  2. bzoj3252 攻略 贪心+dfs序+线段树

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3252 题解 有一个非常显然的贪心思路:每次选择目前走到那儿能够获得的新权值最大的点. 证明的话 ...

  3. [bzoj3252]攻略_dfs序_线段树_贪心

    攻略 bzoj-3252 题目大意:给定一棵n个节点的有根树,点有点权.让你选出至多k个节点,使得他们到根的链的并最大. 注释:$1\le n\le 2\cdot 10^5$,$1\le val_i\ ...

  4. 【bzoj3252】攻略 贪心+DFS序+线段树

    题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某 ...

  5. BZOJ3252攻略——长链剖分+贪心

    题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...

  6. BZOJ3252: 攻略

    Description 题目简述:树版[k取方格数]   众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景 ...

  7. BZOJ3252 攻略 [树链剖分]

    题目传送门 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1169  Solved: 554[Submit][Status][Discuss] ...

  8. bzoj3252 攻略 dfs序+线段树

    题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...

  9. bzoj3252攻略(线段树+dfs序)

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 562  Solved: 238[Submit][Status][Discuss] D ...

随机推荐

  1. 读懂 PetaLinux:让 Linux 在 Zynq 上轻松起“跑”(转)

    对于Zynq这样一个“ARM+可编程逻辑”异构处理系统我们已经不陌生,其创新性大家也有目共睹.不过想要让更多的应用享受到这一“创新”带来的红利,让其真正“落地”则需要大量系统性的工作,去营造一个完善的 ...

  2. golang bug Unknown load command 0x32 (50)

    问题 编译文件时报错: /usr/local/go/pkg/tool/darwin_amd64/link: /usr/local/go/pkg/tool/darwin_amd64/link: comb ...

  3. mac里安装Mycrypt扩展

    https://jingyan.baidu.com/article/e3c78d644cf1ed3c4c85f5a8.html 先用homebrew安装mycrpt 再下载php5.6版本源码 然后进 ...

  4. PHP遍历一个文件夹下所有文件和子文件夹的函数

    <?php function my_dir($dir) { $files = array(); if(@$handle = opendir($dir)) { //注意这里要加一个@,不然会有wa ...

  5. 2015.4.21第一篇cnblog文章

    个人学习记录第一篇. 输出才是最好一条途径,这也是开源的精神所在.

  6. win2008 server 多IP配置

    本人服务器环境   win8 + phpstudy   一个服务器多个IP 以前都是用linux,买了几套源码结果都是win8server 服务器+phpstudy. 渐渐也就随大流了.懒的去琢磨 一 ...

  7. Java 中统计文件中出现单词的次数练习

    统计英文article.txt文件中出现hello这个单词的次数 这个是article.txt文件内容 { hello The Royal Navy is trying hello to play h ...

  8. 【转】C# 开发Chrome内核浏览器(WebKit.net)

    WebKit.net是对WebKit的.Net封装,使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器.这里介绍一下怎么用它来显示一个网页这样的一个最简单的功能. 第一步: 下载 ...

  9. Lzma(7-zip)和zlib

    Lzma(7-zip) 使用: 在C目录中有算法文件,进入Util\LzmaLib目录,编译生成LIB库,导出了以下两函数,LzmaCompress 为压缩函数,LzmaUncompress 为解压缩 ...

  10. django获取表单数据

    django获取单表数据的三种方式 v1 = models.Business.objects.all() # v1是QuerySet的列表 ,内部元素都是对象 v2 = models.Business ...