BZOJ3252攻略——长链剖分+贪心
题目描述
输入
输出
样例输入
4 3 2 1 1
1 2
1 5
2 3
2 4
样例输出
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n,k;
int q[200010];
int cnt;
int tot;
int head[200010];
int next[400010];
int to[400010];
int x,y;
int v[200010];
int son[200010];
ll d[200010];
int f[200010];
ll mx[200010];
ll val[200010];
ll ans;
void add(int x,int y)
{tot++;next[tot]=head[x];head[x]=tot;to[tot]=y;
}
bool cmp(int x,int y)
{return val[x]>val[y];
}
void dfs(int x,int fa)
{d[x]=d[fa]+v[x];f[x]=fa;mx[x]=d[x];for(int i=head[x];i;i=next[i]){if(to[i]!=f[x]){dfs(to[i],x);mx[x]=max(mx[x],mx[to[i]]);if(mx[to[i]]>mx[son[x]]){son[x]=to[i];}}}
}
void dfs2(int x,int tp)
{val[tp]+=v[x];if(son[x]){dfs2(son[x],tp);}for(int i=head[x];i;i=next[i]){if(to[i]!=son[x]&&to[i]!=f[x]){q[++cnt]=to[i];dfs2(to[i],to[i]);}}
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&v[i]);}for(int i=1;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(1,0);q[++cnt]=1;dfs2(1,1);sort(q+1,q+1+cnt,cmp);for(int i=1;i<=k;i++){ans+=val[q[i]];}printf("%lld",ans);
}
转载于:https://www.cnblogs.com/Khada-Jhin/p/9576384.html
BZOJ3252攻略——长链剖分+贪心相关推荐
- 长链剖分 - 攻略(BZOJ3252)
Analysis 其实和长链剖分关系不大 就是一个贪心 按照点权和的大小划分轻重链,然后将所有的链排个序,选前k个即可 Code #include<bits/stdc++.h> #defi ...
- [BZOJ3252][长链剖分]攻略
BZOJ3252 长链剖分之后把每条长链拿出来然后排个序选就完了 Code: #include<bits/stdc++.h> #define ll long long using name ...
- UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)
Description 一棵 n 个点的有根树,带点权 wi. 从 s 出发,希望达到 t,每秒可以从当前点移动到某一个儿子. 有一个死亡次数,初始为 0.若在某个点 i(i != s, t) 时,死 ...
- 长链剖分(知识点整理+板子总结)
思路来源 https://blog.nowcoder.net/n/5eaebd22f5f846838c637bc337cc1ee9 https://blog.csdn.net/litble/artic ...
- BZOJ3252: 攻略
BZOJ3252: 攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...
- 对LCA、树上倍增、树链剖分(重链剖分长链剖分)和LCT(Link-Cut Tree)的学习
LCA what is LCA & what can LCA do LCA(Lowest Common Ancestors),即最近公共祖先 在一棵树上,两个节点的深度最浅的公共祖先就是 L ...
- BZOJ4543/BZOJ3522 [POI2014]Hotel加强版(长链剖分)
题目好神仙--这个叫长链剖分的玩意儿更神仙-- 考虑dp,设\(f[i][j]\)表示以\(i\)为根的子树中到\(i\)的距离为\(j\)的点的个数,\(g[i][j]\)表示\(i\)的子树中有\ ...
- Bzoj4016/洛谷P2993 [FJOI2014] 最短路径树问题(最短路径问题+长链剖分/点分治)
题面 Bzoj 洛谷 题解 首先把最短路径树建出来(用\(Dijkstra\),没试过\(SPFA\)\(\leftarrow\)它死了),然后问题就变成了一个关于深度的问题,可以用长链剖分做,所以我 ...
- BZOJ4381[POI2015]Odwiedziny——分块+长链剖分
题目描述 给定一棵n个点的树,树上每条边的长度都为1,第i个点的权值为a[i]. Byteasar想要走遍这整棵树,他会按照某个1到n的全排列b走n-1次,第i次他会从b[i]点走到b[i+1]点,并 ...
最新文章
- 手把手从零开始搭建k8s集群超详细教程
- java数组与字符串编程及答案_04747_Java语言程序设计(一)_第4章_数组和字符串...
- R语言基于多字段(多数据列、multiple columns)对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案
- ad中电容用什么封装_干货 | 为什么单相电机要用电容,三相电机不需要电容?...
- android siri 源码,Android的SIRI 。
- 泰州市区首次试用“闯红灯人脸识别系统”;“冷扑大师”想用AI提高肾脏移植效率 | AI掘金晚报
- [云炬创业基础笔记]第十一章创业计划书测试3
- MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案
- 戴尔r410服务器raid装系统,Dell R410 Raid磁盘阵列驱动
- 系统漏洞利用与提权攻击机场景
- 推荐几个常用常玩的小游戏网址包括4399.com
- 基于ROS搭建简易软件框架实现ROV水下目标跟踪(补1)--gazebo仿真
- 读书笔记:技术的本质-技术是什么,它是如何进化的 (布莱恩•阿瑟)
- Project使用总结-如何统计项目总工时,设置Project起始日期,修改项目日期格式
- ubuntu下添加日语输入法
- 组合游戏(Nim游戏)——SG函数
- 二级计算机c语言解题技巧,2010年全国计算机等级考试二级C语言考试题型解题技巧...
- php编程里的push,【编程词典】php array_push()函数
- python pprint模块详解
- 少儿机器人编程学习指南