正题 题目链接:https://www.luogu.com.cn/problem/P4292 题目大意 给出\(n\)个点的一棵树,然后求长度在\([L,U]\)之间的一条路径的平均权值最大. 解题思路 先上二分\(0/1\)分数规划,然后变成求最长在\([L,U]\)之间的路径. 很经典的点分治问题,但是用线段树会\(T\),当然可以用单调队列但是我不会. 可以试下上长剖,线段树维护链上每个深度的最大值权值.然后枚举短的那条链的时候在长的那条上面线段树查询就好了. 时间复杂度\(O(n\log…
前言 刚开始看着两道题感觉头皮发麻,后来看看题解,发现挺好理解,只是代码有点长. BZOJ 3672[NOI2014]购票 中文题面,题意略: BZOJ 3672[NOI2014]购票 设f(i)f(i)f(i)表示iii点所花的最小费用,可以写出方程式f(i)=min{ f(j)+pi(disi−disj)+qi }f(i)=min\{\ f(j)+p_i(dis_i-dis_j)+q_i\ \}f(i)=min{ f(j)+pi​(disi​−disj​)+qi​ }其中jjj是iii的祖先…
[WC2010]重建计划 LG传送门 又一道长链剖分好题. 这题写点分治的人应该比较多吧,但是我太菜了,只会长链剖分. 如果你还不会长链剖分的基本操作,可以看看我的长链剖分总结. 首先一看求平均值最大,马上想到套个二分,每次把边权变为原来的边权减去二分的答案,看树上有没有长度在\(L\)和\(U\)之间的正权链就好了. 于是乎问题就转变成了求树上权值和最大的链,这时马上想到我们以前做过的一道题P2993 [FJOI2014]最短路径树问题 题解,我已经在这道题的题解中把需要的思想讲明白了,如果你…
陶陶的难题II 时间限制:40s      空间限制:128MB 题目描述 输入格式 第一行包含一个正整数N,表示树中结点的个数. 第二行包含N个正实数,第i个数表示xi (1<=xi<=10^5). 第三行包含N个正实数,第i个数表示yi (1<=yi<=10^5). 第四行包含N个正实数,第i个数表示pi (1<=pi<=10^5). 第五行包含N个正实数,第i个数表示qi (1<=qi<=10^5). 下面有N-1行,每行包含两个正整数a,b(1<…
题目链接 BZOJ 洛谷 点分治 单调队列: 二分答案,然后判断是否存在一条长度在\([L,R]\)的路径满足权值和非负.可以点分治. 对于(距当前根节点)深度为\(d\)的一条路径,可以用其它子树深度在\([L-d,R-d]\)内的最大值更新.这可以用单调队列维护. 这需要子树中的点按dep排好序.可以用BFS,省掉sort. 直接这样的话,每次用之前的子树更新当前子树时,每次复杂度是\(O(\max\{dep\})\)的(之前子树中最大的深度).能被卡成\(O(n^2\log n)\). 可…
「WC2010」重建计划(长链剖分/点分治) 题目描述 有一棵大小为 \(n\) 的树,给定 \(L, R\) ,要求找到一条长度在 \([L, R]\) 的路径,并且路径上边权的平均值最大 \(1 \leq n,L,R \leq 10^5\) 解题思路 : 前几天沉迷初赛来写几道数据结构恢复一下代码能力,坑填完之后可能就要开始啃思维题了QwQ. 这个题貌似长链剖分和点分复杂度都是 \(O(nlog^2n)\) 的,点分好久都没碰了,长链剖分也只有暑假里口胡了几个多校的题而已,先讲做法吧 这个题…
题面传送门 我!竟!然!独!立!A!C!了!这!道!题!incredible! 首先看到这类最大化某个分式的题目,可以套路地想到分数规划,考虑二分答案 \(mid\) 并检验是否存在合法的 \(S\) 使得 \(\dfrac{\sum\limits_{e\in S}v(e)}{|S|}\ge mid\),将分母乘过去并稍微变个形可得 \(\sum\limits_{e\in S}v(e)-mid\ge 0\),也就是说我们将每条边边权都减去 \(mid\) 并检验包含 \([L,R]\) 条边的路…
题目描述 输入 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案,每行三个正整数Ai,Bi,Vi分别表示道路(Ai,Bi),其价值为Vi 其中城市由1..N进行标号 输出 输出最大平均估值,保留三位小数 样例输入 4 2 3 1 2 1 1 3 2 1 4 3 样例输出 2.500 提示 N<=100000,1<=L<=U<=N-1,Vi<=1000000 这题算…
传送门 长链剖分好题. 题意简述:给一棵树,问边数在[L,R][L,R][L,R]之间的路径权值和与边数之比的最大值. 思路: 用脚指头想都知道要01分数规划. 考虑怎么checkcheckcheck. 发现就是求在转化成真·边权之后有没有长度在[L,R][L,R][L,R]之间的路径权值是大于0的. 然后可以设计状态fi,jf_{i,j}fi,j​表示iii开头长度为jjj的路径最大值,这个可以用长链剖分优化转移. 然后考虑怎么把经过iii的两条路径拼起来更新答案,这个可以用线段树优化转移,然…
看到平均值一眼分数规划,二分答案mid,边权变为w[i]-mid,看是否有长度在[L,R]的正权路径.设f[i][j]表示以i为根向下j步最长路径,用长链剖分可以优化到O(1),查询答案线段树即可,复杂度O(nlog2n) 不知为什么bzoj上RE,luogu上AC,暂时不管了. #include<bits/stdc++.h> #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 using namespace st…