[POI 2014] Couriers】的更多相关文章

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3524 [算法] 首先离线 , 将询问按右端点排序 如果我们知道[l , r]这个区间中[L , mid]中的数有多少个和[mid + 1 , R]中的数有多少个 , 则可以通过二分的方式求出答案 可持久化线段树可以完成这个任务 时间复杂度 : O(NlogN) [代码] #include<bits/stdc++.h> using namespace std; ; struct q…
题目传送门 bzoj 3522 需要root权限的传送点 bzoj 4543 快速的传送点 慢速的传送点 题目大意 给定一棵树,问有多少个无序三元组$(x, y, z)$使得这三个不同点在树上两两距离相等. 考虑这三个点构成的虚树.选取一个"舒适"的计数对象. 其中黄色的点是关键点,绿色的点是虚树上的虚点. 在树形动态规划的时候通常考虑一个点子树内的情况会比较简单.因此考虑将计数对象设为虚树上最浅的一个点. 性质1 最近公共祖先深度较深的两点到它们的最近公共祖先的距离相等. 证明 设这…
Description 题库链接 给定一个 \(N\) 个点 \(M\) 条边的有向无环图,每条边长度都是 \(1\).请找到一个点,使得删掉这个点后剩余的图中的最长路径最短. \(1\leq N\leq 500 000,1\leq M\leq 1 000 000\) Solution 比较神... 值得注意的是,对于一张 \(\text{DAG}\) 的拓扑序,任意从中截断那么前一部分以及后一部分的点都是连续的. 考虑按拓扑序来做,我们需要维护的就只是左边一部分内的最长路,以及右边一部分内的最…
题面 既然我们只知道最后数量为$k$的蚂蚁会在特殊边上被吃掉,不妨逆着推回去,然后到达每个叶节点的时候就会有一个被吃掉的蚂蚁的区间,然后二分一下就好啦 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,maxx=1e9; int ant[N],deg[N],leaf[N]; *N],goal[*N]; int n,g,k,t,root,t1,t2,n1,n2,cnt;…
题目链接 HOTELS 依次枚举每个点,以该点为中心扩展. 每次枚举的时候,从该点的儿子依次出发,搜完一个儿子所有的点之后进行答案统计. 这里用了一个小trick. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i(a); i <= (b); ++i) #define for_edge(i, x) for(int i = H[x]; i; i = X[i]) int n, x, y,…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3831 [算法] 单调队列优化动态规划 时间复杂度 : O(N) [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 1000010 const int inf = 2e9; int n; int a[MAXN] , f[MAXN]; template <typename T> inline vo…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 从食蚁兽所在的边向叶节点推,会得到一个渐渐放大的取值区间,在叶子节点上二分有几群蚂蚁符合条件即可: 注意中途判断,如果已经超过范围就返回或者处理一下,据说会爆 long long 之类的: 而且食蚁兽所在的边的两个端点的初始值不一定是 k 和 k+1 !也要看度数! 注意统计答案的 num 也是 long long . 代码如下: #include<iostream> #inclu…
Description 题库连接 给你 \(n\) 棵树,第 \(i\) 棵树的高度为 \(d_i\).有一只鸟从 1 号树出发,每次飞跃不能超过 \(k\) 的距离.若飞到下一棵树的高度大于等于这一棵树那么耗费一点体力,否则不会.问你飞到第 \(n\) 棵树耗费最少体力为多少.多测,测试组数 \(q\). \(1\leq n\leq 10^6,1\leq q\leq 25\) Solution 朴素的 \(O(n^2)\) DP 是很容易想到的,记 \(f_i\) 表示飞到 \(i\) 上的最…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,求无序三元组 \((u,v,w)\) 的个数,满足其中任意两点树上距离相等.   \(n\le10^5\). \(\mathcal{Solution}\)   考虑如何计数.对于任意三元组 \((u,v,w)\),我们仅在其两两路径所进过的树上最高点对其统计一次.如图:   对于三元组 \((4,6,7)\),我们仅希望在 \(1\) 处统计它的贡献.   考虑 DP,记 \(d(u,v)\)…
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以记录现在的箱子位置和前缀最小值,向上枚举就行. OKR-Periods of Words 戳这 POI 2007 OSI-Axes of Symmetry 戳这 MEG-Megalopolis 树剖 or dfs序上维护前缀和. POI 2010 GIL-Guilds 按照洛谷的题面,可以发现灰点就…