最近公共祖先
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Duff in the Army CodeForces - 587C
点击打开链接利用vector保存信息 注意题目说了"1 ≤ a ≤ 10" 也就是说 每个vector变量里最多存10个元素就足够了 不然MLE#include <bits/stdc++.h>using namespace std;struct node{ int v; int next;};node edge[200010];vector <int...原创 2018-03-25 09:30:08 · 398 阅读 · 0 评论 -
Company CodeForces - 1062E
http://codeforces.com/problemset/problem/1062/E[l,r]内决定lca的肯定是dfs序最小和最大的两个点 因为一棵子树的dfs序是连续的 线段树维护一下每个点dfs序的最大次大和最小次小即可 看删最小合适还是删最大合适比赛时水题切的太慢了 根本没看见这个题 菜的一批 #include <bits/stdc++.h>usi...原创 2018-11-16 16:58:34 · 291 阅读 · 0 评论 -
Red Black Tree ZOJ - 4048
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4048比赛时思路很普通 队友按二分写的 无限TLE 复杂度还是太高借鉴了这篇博客 思路很妙https://blog.csdn.net/lee_w_j__/article/details/82748521每个黑点的花费只和最近的红点祖先有关 并且一次查询中只取最大值...原创 2018-10-26 15:28:49 · 180 阅读 · 0 评论 -
Family Name List HDU - 4409
http://acm.hdu.edu.cn/showproblem.php?pid=4409由G2 <= G1 +1得 题目给的是一个DFS序列 然后单调栈找出每个节点的父节点 然后三种操作都很裸有个坑点 题目中uv的lca不能等于uv 题目说的很隐晦 可以通过下面这句话猜一下"Since Mr. X has no ancestor in the list, so it's gu...原创 2018-09-19 22:04:31 · 242 阅读 · 0 评论 -
The Shortest Statement CodeForces - 1051F
http://codeforces.com/contest/1051/problem/Fn个点m条边的无向带权图 q次询问 每次问两点之间最短距离 m-n<=20且保证连通可以想到先求个生成树 树上两点距离logn求个lca 多余边上的点进行松驰 即提前以每个多余的点为源点跑一次最短路 求出树上最短距离后 遍历多余点 看能否松驰树上两点距离#include <bits/...原创 2018-09-25 14:00:44 · 182 阅读 · 0 评论 -
A Research on "The Hundred Family Surnames" HihoCoder - 1387
https://hihocoder.com/login#include <bits/stdc++.h>using namespace std;struct node1{ int v; int next;};struct node2{ int x; int y; int dis;};map <string,in...原创 2018-09-14 10:54:10 · 183 阅读 · 0 评论 -
Maze Designer 计蒜客
https://nanti.jisuanke.com/t/31462题目说两点之间路径唯一 那就是一棵树 又因为树的补图权值之和要最小 那其实就是求一个最大生成树然后每次查询求个lca即可#include <bits/stdc++.h>using namespace std;#define ll long longstruct node1{ int u;...原创 2018-09-09 19:11:59 · 182 阅读 · 0 评论 -
Xenia and Tree CodeForces - 342E
http://codeforces.com/problemset/problem/342/E可以假设所有红点都给定了不会再变 然后求与某个蓝点最近的红点的距离 这样直接BFS一遍就好啊但是这里有修改 肯定不可能每改一次都跑一遍BFS 这时就要用到分块法 即每累积sqrt(n)次修改就统一大改一次 碰到查询时就先o(1)看之前大改后求得的最短距离 然后再和累积的小修改都求一下最短距离 树上最...原创 2018-09-05 14:33:35 · 359 阅读 · 0 评论 -
A and B and Lecture Rooms CodeForces - 519E
http://codeforces.com/problemset/problem/519/E给一个树图 每次询问给两个点xy 问有多少点和两点距离相等先判两点距离奇偶 如果为偶数则不存在某点和此两点距离相等为奇数则求出与xy之间路径上的中点 假设当前中点就是树根的话 就用n减去根节点所有包含xy的直接子树的节点数就好 因为这两棵子树上的点肯定是偏向于某一方的虽然我们建的是有根树 但...原创 2018-09-05 13:20:58 · 190 阅读 · 0 评论 -
Minimum Cut HDU - 5452
http://acm.hdu.edu.cn/showproblem.php?pid=5452考虑枚举每一条树边 拿掉这条边后会把树分成两个子图 还需要删除的就是两个端点在不同子图上的非树边所以就计算每条非树边对树边的影响 这些树边也就是非树边两端点在树上确定的那条路径上的边 考虑树剖链更新 但是会T可以发现更新和查询是分开的 所以利用差分数组的思想 对两点++ 对两点的lca-=2 然...原创 2018-08-29 23:23:35 · 158 阅读 · 0 评论 -
ping ping ping HDU - 6203
http://acm.hdu.edu.cn/showproblem.php?pid=6203给出q条链 由u和v确定 每条链上至少有一个节点是有故障的 问整个树图中至少有多少故障节点对于每条链 求出lca 再按lca的深度降序排序然后对于一条链 如果uv节点都没有被其他链覆盖过 那就将lca对应的整棵子树标记覆盖 答案加加 否则就说明当前这条链上的故障点已经可以和别的链合并了 可以忽略...原创 2018-08-28 21:57:32 · 206 阅读 · 0 评论 -
Minimum spanning tree for each edge CodeForces - 609E
点击打开链接先求最小生成树的边 这些边的对应值就是生成树的权值 再用这些边建图 对所有非生成树上的边的两点 去掉两者路径上的最长边 然后换为当前边的权值 这个过程求个lca即可这应该是贪心 最小生成树已经是最优解(克鲁斯卡尔方法中 就是从小边找起 感觉也有贪心的意思) 每换下任何一条边都会增加权重(可能不变) 既然非要换至少一条边 那就只换一条就够了#include <bits...原创 2018-03-23 09:39:37 · 209 阅读 · 0 评论 -
树上的最远点对 51Nod - 1766
https://www.51nod.com/Challenge/Problem.html#!#problemId=1766在点集S1 S2中各找出两个最远的点 将S1 S2合并后最远的两个点一定在这四个点之间 满足区间可加性 线段树优化还有就是求LCA 发现之前一直写的是假算法 每次查询都是log的复杂度。。完全可以利用倍增数组结合位运算做到O1查询 就和普通rmq一样 #inc...原创 2018-12-10 16:01:55 · 277 阅读 · 0 评论