BZOJ3252 攻略

Orz hzwer

只要用堆就可以了,跪烂了。。。

话说那个什么ext的库真的能用嘛= =,反正我用了烂删除

结果Rank.3←_←

 1 /**************************************************************
 2     Problem: 3252
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:964 ms
 7     Memory:14036 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <algorithm>
12 #include <queue>
13
14 using namespace std;
15 typedef long long ll;
16 const int N = 200005;
17
18 struct edges {
19     int next, to;
20     edges() {}
21     edges(int _n, int _t) : next(_n), to(_t) {}
22 } e[N];
23
24 struct data {
25     ll first;
26     int w;
27     data() {}
28     data(ll _f, int _w) : first(_f), w(_w) {}
29
30     inline bool operator < (const data &b) const {
31         return first < b.first;
32     }
33 };
34
35 int n, k;
36 int first[N], tot;
37 int v[N];
38 bool vis[N];
39 ll mx[N], ans;
40 priority_queue <data> h;
41
42 inline int read() {
43     int x = 0, sgn = 1;
44     char ch = getchar();
45     while (ch < ‘0‘ || ‘9‘ < ch) {
46         if (ch == ‘-‘) sgn = -1;
47         ch = getchar();
48     }
49     while (‘0‘ <= ch && ch <= ‘9‘) {
50         x = x * 10 + ch - ‘0‘;
51         ch = getchar();
52     }
53     return sgn * x;
54 }
55
56 inline void add_edge(int x, int y) {
57     e[++tot] = edges(first[x], y);
58     first[x] = tot;
59 }
60
61 void dfs(int p) {
62     int x, y;
63     for (x = first[p]; x; x = e[x].next)
64         dfs(y = e[x].to), mx[p] = max(mx[p], mx[y]);
65     mx[p] += v[p];
66     h.push(data(mx[p], p));
67 }
68
69 void del(int p) {
70     int x, y;
71     vis[p] = 1;
72     for (x = first[p]; x; x = e[x].next)
73         if (mx[y = e[x].to] == mx[p] - v[p]) {
74             del(y);
75             break;
76         }
77 }
78
79 int main() {
80     int i, p, x, y;
81     n = read(), k = read();
82     for (i = 1; i <= n; ++i) v[i] = read();
83     for (i = 1; i < n; ++i) {
84         x = read(), y = read();
85         add_edge(x, y);
86     }
87     dfs(1);
88     for (; k && !h.empty(); --k) {
89         while (vis[h.top().w] && !h.empty()) h.pop();
90         if (h.empty()) break;
91         ans += mx[p = h.top().w];
92         del(p);
93     }
94     printf("%lld\n", ans);
95     return 0;
96 }

(p.s. 开了二逼读入以后就变成Rank.1了2333)

时间: 2024-08-03 19:22:47

BZOJ3252 攻略的相关文章

线段树 BZOJ3252 攻略

3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 496  Solved: 211[Submit][Status][Discuss] Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线)

BZOJ3252: 攻略 可并堆

网上有很多人说用dfs序+线段树做...其实stl的堆可以...可并堆可以...很多奇奇怪怪的东西都能做... 可并堆比较好想...也比较好写... 分析: 首先,这是一个网络流做不了的题...数据太大... 其次...我们可以这样考虑一下,这个点的子树中,将这个点的权值仅更新给最大的那个就能满足 之后,在每一个叶子节点上,建立一个大根堆,dfs一遍,将子节点的堆合并,之后找到根节点,将根节点的权值加上当前位置的价值 最后,根节点中前k大的权值和即为答案... 附上代码,精简可行 #includ

【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心

3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 339  Solved: 130[Submit][Status][Discuss] Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线)

Dfs【bzoj3252】攻略

Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景.所有场景和选择支构成树状结构:开始游戏时在根节点(共通线),叶子节点为结局.每个场景有一个价值,现在桂马开启攻略之神模式,同时攻略k次该游戏,问他观赏到的场景的价值和最大是多少(同一场景观看多次是不能重复得到价值的) "为什么你还没玩就知道每个场

移动端点击事件全攻略,有你知道与不知道的各种坑

看标题的时候你可能会想,点击事件有什么好说的,还写一篇攻略?哈哈,如果你这么想,只能说明你too young to simple. 接触过移动端开发的同学可能都会面临点击事件的第一个问题:click事件的300ms延迟响应.不能立即响应给体验造成了很大的困扰,因此解决这个问题就成为了必然. 这个问题的解决方案就是: zepto.js的tap事件.tap事件可以理解为在移动端的click事件,而zepto.js因为几乎完全复制jQuery的api,因此常常被用在h5的开发上用来取代jquery.

Azure进阶攻略丨Azure网络通不通,PsPing&amp;PaPing告诉你答案

很多时候,为了解决一些问题,要查各种文档,很麻烦你造吗!做「伸手党」又容易被鄙视,这时候就需要用到[Azure 进阶攻略]啦!特此,我们推出关于 Azure 常用操作指南的系列文章,每篇涉及一个 Azure 使用过程中的问题,简明扼要直击重点,纯干货内容帮你快速搞定 Azure 使用难题和障碍,只需一两分钟阅读,你就可以继续愉快地翱翔云端~ 在技术人员和网络工程师的世界中,有一些众所周知的排错方式,例如: -你先 Ping 一下某某计算机,看它开着没, -我可以 Ping 通路由器,但 Ping

广州去厦门旅游攻略--(转自 #散文吧网站#)

广州去厦门旅游攻略 发布时间:2016-12-11 17:30 厦门由厦门岛.离岛鼓浪屿.内陆九龙江南岸海沧半岛.集美半岛.翔安区以及同安等组成,陆地面积1699.39Km2,海域面积300多平方公里.厦门的主体--厦门岛南北长13.7公里,东西宽12.5公里,面积约为128.14Km2.是厦门的主要岛屿,也是厦门第一大岛屿.厦门岛是厦门经济特区的发祥地,岛上有厦门的商业和政治中心.各国殖民者最初居住的地方鼓浪屿就在厦门岛西南部.今天小编带给大家的是广州去厦门旅游攻略, 希望对大家有帮助. 厦门

Linux Shell脚本攻略(1.12)

1.12 函数和参数 和其他脚本语言一样,Bash同样支持函数,并且可以传递参数. 1.12.1 函数定义和传参 #!/bin/bash function fname() #也可以用fname()代替 { echo $1,$2; #访问参数1和参数2 echo "[email protected]"; #以列表的方式一次性打印所有参数 echo "$*"; #类似于[email protected],但是参数被作为单个实体 return 0; #返回值 } fnam

备战软考(4) 软考下午题攻略

软考的全称是全国计算机技术与软件专业技术资格(水平)考试,而我们今天讨论的是其中的中级职称的一个科目----软件设计师.这个级别的考试主要分为两大块基础知识和应用技术,分别在考试当天的上午和下午进行测试. 对于基础知识这块,因为考查的知识面很广,也很细,个人而言无法找到一个行之有效的办法能让你迅速的提高上午题的成绩,因此就不在这里总结了,我们要做的就是看书,做题,再看书,再做题,然后接着看书,在看书与做题的反复中,一个一个的消灭自己的知识盲点和填补知识漏洞,这样慢慢的也许会有提升,但不要企图短时