lca
lca
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
POJ 2763 Housewife Wind (树链剖分+边权化点权)
题意:给定一棵含n个结点的生成树,共有q次操作,分为两种:0 c:求从位置s到c的距离,然后s变成c1 a b:把第a条边的权值变为b题解:树链剖分0操作就是树上区间查询。由于该题是边权且为生成树,树链剖分只能解决点权,那我们化成点权即可。即对于边<u, v>,将离根节点远的那个点的权值赋为边权。这样在进行树剖的时候,减去lca的点权即可。这样1操作就是单点更新了。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#原创 2020-10-03 18:38:05 · 262 阅读 · 0 评论 -
POJ 3728 The merchant (在线查询+倍增lca)
题意:给出N个点,和每个点物品的售价,现在有一个商人,要从u点到v点,他想在路上多赚点钱。他可以从一个城市买物品,然后再卖到另一个城市,但买卖只允许一次,且不能回头走,问最多能赚多少。题解:在线查询+倍增lcan个点的生成树,路径有且只有一条,所以考虑lca路径。接下来考虑如何获取利润的最大值。从u到v,差值只可能出现在u到lca、u到v、lca到v这三种路径上。对于u到lca路径,用up数组记录最大利润。对于lca到v路径,用down数组记录最大路径。对于u到v路径,需要记录左路径的最小值M原创 2020-10-03 16:31:06 · 186 阅读 · 0 评论 -
POJ 3417 Network (lca+树上差分)
题意:n个点的生成树,还有m条附加边,删去一条生成树的边和一条附加边,使得变成两个连通分量,有几种方案。题解:lca+树上差分对于每一条附加边<x, y>,将x到y的lca路径上的边标记,即对于该路径上的任意边删去,再删去附加边即可满足要求,但此做法前提是该路径上的边只被覆盖一次。这是第一种情况,ans++。第二种情况就是边没有被覆盖,则删去该边即可分为两个连通块,所以任意删除一条附加边即可,ans += m。对于如何进行覆盖,用树上边差分即可。vector建图会t,用链式前向星存,常原创 2020-09-29 00:23:00 · 113 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors (lca)
题意:带环lca。题解:lca从入度为0的点开始dfs。注意是有向边。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<cmath>原创 2020-09-28 22:14:43 · 92 阅读 · 0 评论 -
HDU 3078 Network (lca+排序)
题意:一棵无向树,输入点数和操作数,下面一行n个值代表每个点的权。下面n-1行是树边。操作分为 0 x w ,表示把点x的权改为w; k a b , 求出从a到b的路径中,第k大的点权。题解:lca+排序居然直接暴力就可以过了,每次询问将lca路径中的点权排序即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstri原创 2020-09-28 21:04:53 · 127 阅读 · 0 评论 -
HDU 2874 Connections between cities (并查集+lca倍增法)
题意:由于战争期间大部分道路已被完全摧毁,两个城市之间可能没有路径,也没有环存在。现在,告诉您道路状况后,我们想知道任何两个城市之间是否存在路径。如果答案是肯定的,则输出它们之间的最短路径。题解:并查集+lca倍增法先用并查集缩点,不在同一集合必然不存在路径,然后dfs预处理每一个集合。这里用倍增法求lca。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<strin原创 2020-09-27 22:10:14 · 248 阅读 · 0 评论 -
HDU 2586 How far away ? (lca倍增法)
题意:给出一棵有边权的树,q次询问,求u、v之间的路径长度。题解:lca倍增法。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<cmat原创 2020-09-27 21:37:17 · 113 阅读 · 0 评论