链接:P2680 题意: 在树上把一条边边权变为0使得最长给定路径最短 分析: 最大值最小可以想到二分答案,对于每一个mid,寻找所有大于mid的路径,再寻找是否存在一条边使得删去它后大于mid的路径都小于等于mid,可以将这个条件分成两部分. 所有大于mid的路径都经过该边.可以想到统计路径数和每条边被经过的次数,前者可以在添加大于mid的路径时统计,后者则可以用树上边的差分搞定. 每条大于mid的路径删去这条边后都小于等于mid.我们发现在添加路径时如果大于mid的路径数为零则任何一条边根本…
P2680 题目的大意就是走完m条路径所需要的最短时间(边权是时间), 其中我们可以把一条边的权值变成0(也就是题目所说的虫洞). 可以考虑二分答案x,找到一条边,使得所有大于x的路径都经过这条边(差分维护),并且路径减去这条边的边权后小等于x,通过这样判定x是否可行. 1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N = 3e5 + 10; 5 int tot, hea…
题目链接:P2680 [NOIP2015 提高组] 运输计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 看了好长时间题解才终于懂的,有关lca和二分答案的题解解释的不详细,一时半会理解不过来,于是自己写一篇解释尽管解释主要在代码中,希望能对迷茫的小伙伴有帮助 解析(主要为二分答案的解析,lca只是求距离和找覆盖边时用得到,这里不多说): 由于m个运输计划是同时出发,所以所需要的时间取决于花费最长的时间,因为一个任务在y分钟内完成,那么另一个任务x(x<=y)也一定完成.…
码农题啊兄弟们. 随便考虑二分一下,然后发现要取一条满足性质的边. 被所有大于\(mid\)的路径都覆盖,取了之后能把他们都弄到小于\(mid\) 那就树上差分再处理一下. 写了\(180h\),老年人复建训练. NOIP2015 提高组] 运输计划 // Problem: P2680 [NOIP2015 提高组] 运输计划 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P2680 // Memory Limit: 292.…
题目:BZOJ4326.洛谷P2680.Vijos P1983.UOJ#150.codevs4632.codevs5440. 题目大意:有一棵带权树,有一些运输计划,第i个运输计划从ai到bi,耗时为ai到bi的距离,所有运输计划一起开始.现在可以把一条边权变成0,求最终运输计划最短要多少时间. 解题思路:标算是树剖,然而我并不会…… 我的方法是LCA+二分+树上差分. 首先LCA,求出每个运输计划的长度,可一遍dfs求出每个节点到根的距离dist,则a到b的长度为dist[a]+dist[b]…
题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长.由于预算限制,组委会…
树上差分加上二分答案 详细题解待填坑 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; ; ; ; ]; int lcav[MAXM],cf[MAXN],fw[MAXN],lent[MAXN]; int uline[MAXM],vline[MAXM],wline[MAXM]; ,u[MAXN*],v[MAXN*],w[MAXN*],first[MAXN*],nex…
P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大…
以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入输出格…
题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个数为a,已经搜索完了a个数,现在的和是num. #include<iostream> using namespace std; int n,k,a; long long ans; void dfs(int a,int u,int now){ if(now>n) return; if(u>…