LGP5992题解
贪心和DP一样,上来先找规律
考虑一种特殊情况:菊花图。
很容易发现这是小学数学题,排序后取中点。
来考虑另一种情况:深度为 3 的完全二叉树。
假设这颗完全二叉树的节点编号是按照线段树编号的,给定权值的节点是 4 5 6 7。方便起见,设 \(v_u\) 为编号为 \(u\) 的节点的权值,且有 \(v_5>v_4,v_7>v_6\)。
很容易发现 \(v_3\) 取值范围是 \([v_4,v_5]\),\(v_4\) 的取值范围是 \([v_6,v_7]\)。
那么 \(v_1\) 呢?
分类讨论。
- \(v_5 \leq v_6\) 很明显是 \([v_5,v_6]\)。
- 两个区间相交 很明显取值范围就是区间的交。
有没有一点儿思路了?
再来看看一种情况(下面设节点 \(u\) 的取值范围是 \([l_u,r_u]\)):
节点 \(u\) 有三个儿子 \(a,b,c\),且 \(l_a \leq l_b,r_b \leq r_a,r_a \leq l_c\)(也就是 \(a\) 包含了 \(b\))
取值范围明显是 \([r_b,r_a]\)。
所以最终思路是:将儿子的取值范围的左右端点全部拉出来,排序后取最中间的两个作为该节点的取值范围。
记得特判 \(n=m=2\) 的阴间情况(
#include<algorithm>
#include<cstdio>
const int M=5e5+5;
int n,m,cnt,f[M],h[M],l[M],r[M];int len,tmp[M<<1];long long ans;
struct Edge{
int v,nx;
}e[M<<1];
inline void Add(const int&u,const int&v){
e[++cnt]=(Edge){v,h[u]};h[u]=cnt;
e[++cnt]=(Edge){u,h[v]};h[v]=cnt;
}
void DFS(const int&u){
for(int v,E(h[u]);E;E=e[E].nx)if((v=e[E].v)^f[u])f[v]=u,DFS(v);
for(int v,E(h[u]);E;E=e[E].nx)if((v=e[E].v)^f[u])tmp[++len]=l[v],tmp[++len]=r[v];
if(!e[h[u]].nx)return;std::sort(tmp+1,tmp+len+1);l[u]=tmp[len>>1];r[u]=tmp[(len>>1)+1];len=0;
for(int v,E(h[u]);E;E=e[E].nx)if((v=e[E].v)^f[u])ans+=l[u]>r[v]?l[u]-r[v]:l[u]<l[v]?l[v]-l[u]:0;
}
signed main(){
int i,u,v;scanf("%d%d",&n,&m);
for(i=1;i<n;++i)scanf("%d%d",&u,&v),Add(u,v);for(i=1;i<=m;++i)scanf("%d",&u),l[i]=r[i]=u;
if(n==2)return!printf("%d",l[1]>l[2]?l[1]-l[2]:l[2]-l[1]);
DFS(n);printf("%lld",ans);
}
LGP5992题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 解决手机unauthorized错误
手机:xiaomi-note(OS: Android 6.0) 手机开发者选项中USB调试已经打开,在电脑命令行下输入adb devices,显示手机未认证 D:\develop\androidroo ...
- WSL2设置局域网网访问
标签: wsl2 局域网 docker WSL2设置内网访问 1.先找到虚拟机的ip 2.设置端口转发(需要管理员权限运行powershell) 3.删除端口转发 4.配置入站规则. 1.先找到 ...
- android 如何动态设置View的margin和padding
感谢大佬:https://blog.csdn.net/a107494639/article/details/7341077 1.动态设置padding,拿ImageView为例: ImageView ...
- Spack 内置函数
1.Map函数:通过函数传递源的每个元素,并形成新的分布式数据集. %spark #并行化集合生成RDD var data = sc.parallelize(List(10,20,30)) %输出结果 ...
- 30天自制操作系统day2汇编语言
<30天自制操作系统>一书中第1天和第二天中有关汇编语言的程序的理解 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以下的记述用于标准FAT12格 ...
- Solution -「POJ 3710」Christmas Game
\(\mathcal{Decription}\) Link. 定义一棵圣诞树: 是仙人掌. 不存在两个同一环上的点,度数均 \(\ge 3\). 给出 \(n\) 棵互不相关的圣诞树,双人 ...
- (待补充)diff 算法解析
今天,学习React的时候,底层提到了 diff算法,顺藤摸瓜, 也发现了VUE也使用了diff算法. mark一下,后续补充 infoq-VUE-diff算法 react-diff算法
- HTML5/CSS3/JS笔记
HTML笔记: 前言: HTML无非就是围绕标签.属性.属性值这三个词展开的. (标签也可以叫做元素, 元素的内容是开始标签与结束标签之间的内容) *常规标签 <标签 属性1="属性值 ...
- 本塔科技借力VR Engine,提供更优质的3D VR内容
本文分享于华为开发者论坛<本塔科技借力HMS Core VR Engine,提供更优质的3D VR视频内容> 本塔科技致力于为影视行业提供优质的3D VR视频内容,追求稳定.观看感舒适.良 ...
- 面试题(造火箭必备技能):请举例一个最有成就感的性能bug
当前,绝大部分招聘都有性能要求或者把其作为加分项(会性能优先),哪怕你不是面试的性能,面试的时候可能会问性能,所以大家才会有"面试造火箭,进去拧螺丝"的共鸣.至于企业为什么重视性能 ...