LCA
Dan__ge
Today is difficult,tomorrow is more difficult,but the day after is beautiful.
展开
-
HDU 5452 LCA
点击打开链接题意:给一个树和树上的分支组成的图,问我当且仅当删除一条树上的边,最少再删除几条边使得图不连通思路:我写了两个做法,第一种是不加优化的十分暴力的LCA,也就是裸的,因为这道题目的数据说很水,这样的复杂度也可以,O(n*m),n为20000,m为200000,明明是超时好不好,这个做法也简单易懂,在这个树上,我们加了一条边u->v,那么u与v的最近公共祖先为fa,那么u->f原创 2016-05-25 17:42:46 · 3351 阅读 · 0 评论 -
51nod 1766 线段树维护树的直径
点击打开链接题意:中文思路:用线段树维护树的直径,具体的可以参考这篇文章,首先要知道如何合并一个区间,那么要知道左区间的最长路径的两个端点以及右区间的两个端点,合并后的最长路径就是4个端点的6种组合中的一个,知道这个就相对简单点了,路径长度的计算可以用LCA-RMQ来完成#include #include #include #include #include #include原创 2016-10-26 13:47:41 · 641 阅读 · 0 评论 -
codeforces 519E 倍增法LCA
点击打开链接题意:给一个树,然后每次询问需要统计树上的点到达a和b的最近距离相等,求这样的点的个数思路:因为是一个树,所以最近距离便是LCA上的边,那么就可以看出来当a和b的距离是奇数时结果为0,当是偶数时,最中间的那个点可以,并且与它相连的不是LCA上的点都是可以的,自己画一个图很好看出来 以前的模版不能快速求出某个点的第几个父亲,而这个可以,以后就用这个,其实记录父节点暴力上原创 2016-10-23 16:54:59 · 623 阅读 · 0 评论 -
UVA 11354 LCA+最小生成树
点击打开链接题意:给一个无向图,然后有Q次询问U V,问的是U到V的所有路径中的最小值最大思路:U到V的路径最小值最大,则这条边肯定是最小生成树上的边,那么我们可以先将所有的最小生成树上的边全都找出来,然后现在是一个树,然后跑一边LCA,对于现在询问的U到V,只要找到它们的最近公共祖先,然后两个点向上找到它,比较路径中的最大值即可 PS:这么暴力找跑得有点慢#include #incl原创 2016-06-28 19:17:35 · 1714 阅读 · 0 评论 -
HDU 4912 LCA+策略
点击打开链接题意:给了一个树,然后m条路径,问最多可以选多少条路径而没有一个点是重复使用的,如第二组样例,3条路径是4—2—5和6—3—7和2—1—3,那么只能选前两个使得所选路径最多思路:没啥思路,看了正解竟然是LCA+贪心,好嘛可以这样考虑,对于所有的可选路径,我们先选择最下面的对上面是没有影响的,那么我们可以对每条路经的最上面的那个点进行排序,就按深度由大到小排序,然后这个最上面的点原创 2016-06-28 16:42:12 · 2148 阅读 · 0 评论 -
HDU 4836 LCA转RMQ
点击打开链接题意:中文思路:如果没有多次询问的话,就可以直接用简单的DFS与LCA就可以完成,然而却多加了个变换根的操作,那么怎么办,与刚刚写的那道点这里类似,都是可以变根的,建议先写那道再写这个,思想都是一样的,那么这道题我们也是以1为根先进行LCA与DFS,然后每次的根与询问就是那道题的换根的部分,这不太好说只能自己理解了#include #include #include #i原创 2016-06-27 18:21:18 · 1027 阅读 · 0 评论 -
PKU 1020 A Problem about Tree LCA
点击打开链接题意:给了一个树,然后m次查询,X Y,就是以X为根的Y的父节点思路:数量有点大,肯定不能暴力找了,只能找一找树上的性质了,我们先做一遍LCA,然后对于X Y,若X与Y的最近公共祖先不等于Y,则结果就是Y的父节点,现在看看若Y不是最后的祖先,那么Y的某个祖先就是最近公共祖先,也就是说它的父节点并没有变化,而剩下的那种情况则是Y就是最近公共祖先,那么这个树的位置就是要相反的了,所原创 2016-06-27 16:41:29 · 695 阅读 · 0 评论 -
POJ 3417 LCA+DFS
点击打开链接题意:给一个树,然后又在树上加了好多的边,现在问你删除一条原先的边和新加的边的一条,有多少中方法使得树不连通思路:对于新加的一条边来说,肯定会与之前的树形成一个环,而此时环内的所有边删除并且新加的这条变也删除就会是一种方案,而这道题是将所有新边都加入后的情况,那么我们看每条边,如果没有与它形成环的情况,那么这条边删除肯定会使得图不连通,那么情况就会加M,也就是和新加的M条边任意原创 2016-06-27 14:26:17 · 830 阅读 · 0 评论 -
HDU 3078 LCA转RMQ
点击打开链接题意:给一个树和每个点的权值,然后m询问a b c,若a为0,则将b点的权值改为c,否则问你的是从b走到c的所有权值中的第a大的数,若不足a个输出那个思路:就是用LCA转RMQ就可以了,每次的询问就是直接找到它们的最近公共祖先,然后两个点都向上找到最近公共祖先,沿途的所有的点全部记录下来,最后排个序输出第K大就行了#include #include #include #i原创 2016-06-26 19:15:10 · 1833 阅读 · 0 评论 -
HDU 2874 LCA转RMQ+并查集
点击打开链接题意:问两个城市是否相连,不相连输出Not connected,否则输出两个城市间的最短距离思路:用并查集判断两个城市的连通性,如果联通则做法和LCA一样,但是注意的一点是地图不连通的话,我们要将所有点都建起来,就要加一个模拟的点,将所有图串起来,很好处理的,看一下就会了#include #include #include #include #include #inc原创 2016-05-02 20:25:59 · 3954 阅读 · 0 评论 -
HDU 2586 LCA转RMQ
点击打开链接题意:就是问两个节点间的距离思路:又切了一道模版水题,不解释了,看不懂变量含义的可以看我写的这篇,解释的比较详细ZOJ 3195#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3原创 2016-05-02 20:00:25 · 4153 阅读 · 0 评论 -
ZOJ 3195 LCA转RMQ
点击打开链接题意:输入n,接下来n-1行,每行a,b,c代表a与b有一条权值为c的边,双向边,m次询问,问最短的距离使a,b,c可以联通思路:LCA的模版题,没什么好说的,看理论的话网上好多本弱就不说了,代码有注释,有助于理解#include #include #include #include #include #include using namespace std;ty原创 2016-05-02 19:37:03 · 4021 阅读 · 0 评论 -
codeforces 733F LCA+最小生成树
点击打开链接题意:给一个图,及每条边的边权,然后每条边都可以使自己的边权减少1,但是需要费用ci,然后你有S的费用,问你如何分配这些费用使得最小生成树的值最小思路:首先要明确对于这所有的费用,我是全部用在一条边上的,也就是说只用修改一条边的权值,那么我们可以先将原图的最小生成树找出来,然后建个LCA 的图,之后枚举每条边,如果是最小生成树上的边,那么直接减然后判断即可, 但是如果不是的话,原创 2016-11-20 14:39:26 · 947 阅读 · 0 评论