[UOJ#276][清华集训2016]汽水[分数规划+点分治]
题意
给定一棵 \(n\) 个点的树,给定 \(k\) ,求 \(|\frac{\sum w(路径长度)}{t(路径边数)}-k|\)的最小值。
\(n\leq 5\times 10^5,k\leq 10^{13}\)
分析
看到分数考虑分数规划,二分答案 \(x\),式子转化成 \(-x< \frac{\sum w}{t}-k< x\)
将边权变为 \(w-k\) 消除 \(k\) 的影响。但是不能够直接求最长链。因为是路径,考虑点分治。
二分答案 \(x\) 之后考虑两条路径组合 \((A_1,B_1),(A_2,B_2)\),其中 \(A\) 表示路径长度,\(B\) 表示路径边数。
有 \(-x<\frac{A_1+A_2}{B_1+B_2}< x\) ,当 \(A_1+A_2 > 0\) 时只用考虑 \(< x\) 的条件,得到 \(A_1-B_1x< B_2x-A_2\),反之同理。现在考虑 \(A_1+A_2 > 0\) 的情况。先将所有路径按照 \(A\) 排序后从左边开始枚举路径,然后用一个指针从右往左维护所有 \(A_1+A_2> 0\) 的路径,然后维护 \(Bx-A\) 的最小值。但是有可能最小值和当前枚举的路径相同,所以再记一个次小值。
由于要下取整,先求出 \(> ans\) 的最小整数解然后 \(-1\) 。
总时间复杂度为 \(O(nlog^2n)\)。
## 代码
~~~cpp
#include
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].lst,v=e[i].to)
#define rep(i,a,b) for(int i=a;iinline bool Max(T &a,T b){return ainline bool Min(T &a,T b){return b=0;--p)
upd(data(st[p].a-st[p].b*mid,0,st[p].from),m1,m2);
if(st[i].b*mid-st[i].a>(st[i].from==m1.from?m2.a:m1.a)) return 1;
}
return 0;
}
bool ck2(int u,LL mid){
int p=1;
data m1(inf,-1,-1),m2(inf,-1,-1);
for(int i=tp;i;--i){
for(;p(st[i].from==m1.from?m2.a:m1.a)) return 1;
}
return 0;
}
void dfs(int u){
vis[u]=1,st[tp=1]=data(0,0,0);
go(u)if(!vis[v]) {
d[v]=data(e[i].c,1,v);
getdep(v,u,v);
}
sort(st+1,st+1+tp);
LL l=1,r=ans;
while(l>1;
if(ck1(u,mid)||ck2(u,mid)) r=mid;
else l=mid+1;
}
Min(ans,l);
go(u)if(!vis[v])
rt=0,sn=son[v],getrt(v,u),dfs(rt);
}
int main(){
scanf("%d%lld",&n,&k);
rep(i,1,n-1){
int a,b;LL w;
scanf("%d%d%lld",&a,&b,&w);
Add(a,b,w-k);
Min(ans,abs(w-k)+1);
}
sn=n,g[rt=0]=0x3f3f3f3f,getrt(1,0),dfs(rt);
printf("%lld\n",ans-1);
return 0;
}
[UOJ#276][清华集训2016]汽水[分数规划+点分治]的更多相关文章
- [UOJ#274][清华集训2016]温暖会指引我们前行
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...
- BZOJ.4738.[清华集训2016]汽水(点分治 分数规划)
BZOJ UOJ 记\(val_i\)是每条边的边权,\(s\)是边权和,\(t\)是经过边数,\(k\)是给定的\(k\). 在点分治的时候二分答案\(x\),设\(|\frac st-k|=x\) ...
- BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...
- UOJ276 [清华集训2016] 汽水 【二分答案】【点分治】【树状数组】
题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并 ...
- 并不对劲的uoj276. [清华集训2016]汽水
想要很对劲的讲解,请点击这里 题目大意 有一棵\(n\)(\(n\leq 50000\))个节点的树,有边权 求一条路径使该路径的边权平均值最接近给出的一个数\(k\) 输出边权平均值下取整的整数部分 ...
- [UOJ#276]【清华集训2016】汽水
[UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一 ...
- UOJ 275. 【清华集训2016】组合数问题
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...
- UOJ #269. 【清华集训2016】如何优雅地求和
UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x ...
- UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
#274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...
随机推荐
- Prometheus Node_exporter 之 Disk Datail /proc/diskstats
Disk Datail /proc/diskstats 1. Disk IOps Completed type: GraphUnit: I/O ops/sec(iops)Label: IO read( ...
- Java AWT
AWT是抽象窗口工具包,是API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中. ...
- [python]如何理解uiautomator里面的 instance 及使用场景
通过uiautomatorviewer打开之后,需要通过对某个控件进行操作,但在当前界面中该控件所有属性无法唯一(其它控件属性也是一样),这个时候就需要借助实例(instance)来进行区分,inst ...
- SASS对css的管理
一.SASS简介 SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一般 ...
- Swift Package Manager(一)初探
一句话:Swift Package Manager(swift包管理器,简称:SPM)就是在swift开发中用来替代CocoaPod的:在swift开发中,SPM完全可以替代CocoaPod的功能,并 ...
- 修改Lotus notes默认浏览器
notes收到的邮件里面的链接,点了以后会自动在notes里打开,但notes很弱,加载页面总是有问题.怎么才能让他默认用ie浏览器打开呢,怎么设置,请教达人. 右下角有个office->Edi ...
- Linux核心-hc课堂笔记
windows系统:分区 linux系统:树形结构 <鸟哥的私房菜>关于分区.linux命令.基础篇 服务器篇 关于文件夹: /boot 引导分区,操作系统启动时要到该目录下 ...
- [转]VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案
据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经常要用的算法 ...
- Tornado框架实现异步爬虫
from urllib.parse import urljoin from bs4 import BeautifulSoup from tornado import gen, httpclient, ...
- iOS VideoToolBox decoder解码失败(-12909和-12911)问题解决
对于任何H.264解码器而言,都要将SPS和PPS信息传递给解码器.FFmpeg内部做了设置,所以没有显示设置.但是对于硬件解码器来讲,开发者必须手动设置.另外,使用FFmpeg解码出来的视频帧是以Y ...