建议到UOJ上去交 题解 一眼\(DP\),先把转移方程写出来 设\(dp[i]\)为从点\(i\)出发到点\(1\)的最小费用,那么存在转移 \[f[i]=min\{f[j]+(d[i]-d[j])p[i]\}+q[i]=min\{f[j]-d[j]p[i]\}+d[i]*p[i]+q[i]\] 这个式子看起来可以斜率优化啊,往下化几步,可以得到类似下面的东西: 若\(d[j] < d[
请紧盯这张照片5秒钟,你能否看出任何异样呢? 照片中的女性同时拥有白人血统、西班牙人血统、亚洲人血统以及印度人血统。 她皮肤光彩无暇,眼神扑朔迷离,似乎美得不真实。 她并不真实存在,但她也并非完全虚构。 创造她的正是文摘菌今天要介绍的一项黑科技——“平(da)均(zhong)脸”。
相关链接: 国家集训队论文2009: 漆子超《分治算法在树的路径问题中的应用》 点分治: 首先选取一个点将无根树转为有根树,再递归处理每一颗以根结点的儿子为根的子树。 [POJ1741]Tree [SPOJ1825]FTOUR2 边分治: 在树中选取一条边,将原树分成两棵不相交的树,递归处理。 [SPOJ2666]QTR
#include<bits/stdc++.h> #define N 100010 #define INF 0x3f3f3f3f #define eps 1e-10 #define pi 3.141592653589793 #define P 1000000007 #define LL long long #define pb push_back #define fi first #define se second #define cl clear #define si size #defin
1.不完全状态记录<1>青蛙过河问题<2>利用区间dp2.背包类问题<1> 0-1背包,经典问题<2>无限背包,经典问题<3>判定性背包问题<4>带附属关系的背包问题<5> + -1背包问题<6>双背包求最优值<7>构造三角形问题<8>带上下界限制的背包问题(012背包)3.线性的动态规划问题<1>积木游戏问题<2>决斗
做法 \(x\)为隐藏节点,\(dep_x=d(1,x)\) \((1)\):\(u=1\) \((2)\):重链剖分,比如\(v\)为\(u\)的重链底部,查询\(dis(x,v)\)的长度,\(y=lca(v,x)\)且在重链上,\(dis(x,v)=dep_v+dep_x-2*dep_y,dep_y=(dep_v+dep_x-dis(x,v))/2\),则我们可以找到\(y\) \((3)\):但\(dep_y=dep_x\)时,\(y\)为答
链接:https://vjudge.net/problem/HDU-3966 题意: Our protagonist is the handsome human prince Aragorn comes from The Lord of the Rings. One day Aragorn finds a lot of enemies who want to invade his kingdom. As Aragorn knows, the enemy has N camps out of his kin
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 300000 #define lson (now<<1) #define rson ((now<<1)|1) #define ll long long const ll inf = 1e17; using namespace std;int hd[maxn],
题意:给N个点,M条边的图,M >= N-1 , 每次给个特殊边 , 问必须用这个边的最小生成树 的边权和 (两个点间没有重边) 树链剖分裸题 , 边权转点权 在DFS两边的过程中 , 把边权 转到 它对应子节点 的点上。 树链剖分维护 U , V 这两个点中间 边权最大值 注意WA点 , 我们用map 标记一条边 的
题意 给一颗带点权的树,三种操作 \(1~s~t\) 修改从1到s的路径上的所有点,\(a[i]=a[i]|t\) \(2~s~t\) 修改从1到s的路径上的所有点,\(a[i]=a[i]\&t\) \(3~s~t\) 询问将1到s的路径上的所有点作为石头堆,再加上一个个数为\(t\)的石头堆,进行一次尼姆博弈,先手胜利输出YES,否则输出NO 分析
LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们把这棵树长链剖分,每次在所有轻儿子中找深度最大的,去掉距离u小于这个深度的栈里的点,然后去计算u的重儿
树链剖分 问题 将树上x到y最短路径上所有结点的值都加上z 可以用树上差分,cf[x]+=z ; cf[y]+=z; cf[lac(x,y)] -= z; cf[fa[lca(x,y)]] -= z; 求树上从x到y结点最短路径的点权和或者边长和 dist = dis[x] + dis[y] - 2*dis[lac(x,y)],dis[x]代表结点x到root的距离,可以通过dfs预
题意:求将一个n边形分解成(n-2)个三边形花费的最小精力,其中花费的精力是所有三角形的三顶点编号乘积的和(其中编号是按照顶点的顺时针顺序编写的) 考虑1,x,y连了一个三角形,x,y,z连了一个三角形。权值为xy+xyz。 换一种连接方法,1,x,z和1,y,z。权值为xz+yz 考虑x,y≥2时,x+y≤xy,所以后
最近写动态点分治快自闭了QAQ....... 有时间再来写一下题解. 其实我不会告诉你我还没调出来呢QAQ Code: // luogu-judger-enable-o2// luogu-judger-enable-o2#include <bits/stdc++.h>#define setIO(s) freopen(s".in","r",stdin) // ,freopen(s".out","w",stdo
https://www.luogu.org/problemnew/show/P3384 知识点 :1.先切割重边,还记得求出top 2.线段树维护dfs序下的val数组,一条链上的数在dfs序中是连续的 3.求值时就在树上跑,优化在于一条链上的信息可以直接求,顾跳top即可 There is a false in the code : False 1 #
题意 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避
题意 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 分析 用线段树维护下区间左
看到平均值一眼分数规划,二分答案mid,边权变为w[i]-mid,看是否有长度在[L,R]的正权路径。设f[i][j]表示以i为根向下j步最长路径,用长链剖分可以优化到O(1),查询答案线段树即可,复杂度O(nlog2n) 不知为什么bzoj上RE,luogu上AC,暂时不管了。 #include<bits/stdc++.h>#define lson l,mid,rt<
优美三角剖分 题目大意: 有一个图形,通过组合可以变成新的图形,现在要求第n个图形 原题: 题目描述 小X同学为了搞好和小C同学的关系,特意寻找了一些优美的图像作为礼物。 这是一些由无穷无尽三角形组成的极为优美的图形,小X同学很想实现这些极富美感的图形,但是作为一名初赛都未过
时间复杂度: 预处理O(n + NlogN) , 修改和查询O(logN) 树链剖分原理: 第一遍 dfs , 求得 所有节点的 深度 dep[ ] , 记录每个节点的父亲节点 fa[ ] , 记录每个节点所代表的子树的大小【包括节点本身】 第二遍 dfs , 记录 每个节点的 重链 , 记下当前节点 x 所在的链 的 链头top[x] ,
题目链接: G - Game HDU - 5242 题目大意:首先是T组测试样例,给出一颗以1节点为根的树,每个节点有各自的价值,有m次从根节点出发向下走到叶子节点的机会,每次会得到所有经过节点的权值,每个节点只有在第一次经过时有价值,求m次之后能够获得的最大权值。 具体思路:数链剖分,把重链按照权
线段树区间合并就挺麻烦了,再套个树链就更加鬼畜,不过除了代码量大就没什么其他的了。。 一些细节:线段树每个结点用结构体保存,pushup等合并函数改成返回一个结构体,这样好写一些 struct Seg{ int lc,rc,tot; Seg(){lc=rc=-1;tot=0;}};Seg seg[maxn<<2];int lazy[maxn<<2];Seg p
前言 长链剖分是很早以前就听\(hl666\)神仙说过的算法,好像在处理与树上深度有关的问题时非常有用,而且还可以用于优化树形\(DP\)。 现在为了肝希望而下定决心去学一学。 什么是长链剖分? 其概念可以参考树链剖分(重链剖分)。 根据重链剖分的定义,重节点表示\(Size\)最大的子节点。 而我
。。。rt。。。安利一发大佬博客https://www.cnblogs.com/ivanovcraft/p/9019090.html 注意:不要把dfn和rw弄混了。。。 #include<cstdio>#include<iostream>#define ll long long#define R register ll#define ls (tr<<1)#define rs (tr<<1|1)const int M=100010;using namesp
题目 P4949 最短距离 做法 先把非树边提出来 查询\((x,y)\)的最短距离就分类查询:树上\((x,y)\)距离,经过非树边距离 带边权查询链长,一个烂大街的套路:树链剖分,节点维护树边距离 待修改随便搞搞就行 Code #include<bits/stdc++.h> typedef int LL; const LL maxn=3e5+9; inline LL Rea