双倍经验:洛谷3146题意有 $N$ 个正整数,每次可以选相邻的相同的数合并,合并后得到的值为原数 $+1$ 。求合并后最大数的最大值。其中 $N\le 262144$ 。题解用 $f[i][j]$ 表示左端点为 $j$ ,能合并出 $i$ 这个数字的右端点的位置。显然 $i$ 是由 $i-1$ 转移过来的,所以我们要构造 $f[i-1][?]$ 。不妨考虑 $i+1$ ,在 $f[i][j...
题意一棵无根树,要求根节点到每个叶子的路径上都至少有一个有色节点。给出根节点到每个叶子节点路径上最后一个有色节点的颜色,求有色节点个数最小值。其中点数 $N\le 1000$ ,叶子节点个数 $M\le 5021$ 。(我按个人习惯反过来了)题解树形dp,用 $f[x][0/1]$ 表示以 $x$ 为根的子树,最后一个有色节点颜色为黑/白的最优情况。考虑状态转移,如果子节点和自己要求一样,则...
时隔半年再来做发现还是不会,于是乎还是写个总结吧。题意一棵二叉树,只能保留 $Q$ 条边,求剩下的边最大边权和。其中点数 $N\le 100$ ,$Q\le 100$ 。题解用 $f[x][j]$ 表示在以 $x$ 为根的子树上保留 $j$ 条边的最优情况。搜索时枚举 $x$ 的子节点 $y$ ,然后类比背包枚举以 $y$ 为根的子树保留的边数 $k$ ,得到状态转移如下:$f[x][j]=...
题意一个序列 $S$ ,合并两个区间 $[l,x]$ 和 $[x,r]$ 对答案的贡献为 $(S_l+S_r)\times S_x$ 。先任取 $mid$ 将序列不断二分,直到每个区间只有一个元素后再合并。求答案的最大值,以及每阶段二分时取的 $mid$ 。按照阶段从小到大,每阶段内从左到右输出。其中序列的长度 $N\le 300$ 。题解显然区间dp,就是输出二分的方法有点麻烦。我最开始是...
题意在无向图上指定起点和终点,要求找一个节点 $x$ ,使得起点 $st$ 和终点 $ed$ 间所有路径都经过它。其中点数 $N\le 100$ 。题解显然 $x$ 肯定是在起点终点路径上的割点,因为去掉它后起点后终点所在的块就不再连通。那么从起点出发,找一个割点,保证它与终点连通,即满足 $id[ed]\geq id[y]$ 就行了。还有 $x$ 不能是起点或终点。#include<...
题意给出一个无向图,对于每个节点 $i$ ,求如果去掉这个节点有多少对点不能连通。其中点数 $N\le 100000$ ,边数 $M\le 500000$ 。题解因为是求点对,所以所有答案都要 $\times 2$ 。先考虑去掉的这个点,其它点都不能和它连通,所以 $ans+=(n-1)\times 2$ 。如果这个点是割点,那么去掉这个点还会对图上其它点有影响。在 $Tarjan$ 过程中...
题意给出一个无向图,要求在一些节点设置出口,要求任意一个节点爆了以后所有节点都能到达出口。其中边数 $M\le 500$ ,点数要自己推。题解先求出割点,然后对每个双连通分量求出节点个数 $siz$ 和割点个数 $cut$ ,分类讨论:双连通分量里没有割点,那么它无法与外界连通,只能自己内部修 $2$ 个出口,方案数为 $\dfrac {siz\times \left( siz-1\righ...
题意给一个无向图,要求任意两个点之间都至少有两条相离的路径,求最少的连边数。其中点数 $N\le 5000$ ,边数 $M\le 10000$ 。题解显然环上的节点都满足这个要求,所以题目可以理解成要求所有节点都在环上,那么可以先把已经有的环缩点。缩完点后就变成了一棵树,要让所有点在环上,那么把所有叶子节点之间两两连接即可。当然叶子节点也有可能有奇数个,所以需要连边的个数为 $(leaf+1...
题意给出一个有点权的无向图,有的节点有酒吧。从起点出发,需要找到以酒吧为终点的路径,每个节点可以经过任意次,求路径上点权和的最大值。其中点数 $N\le 500000$ ,边数 $M\le 500000$ 。题解缩点,转化为DAG后跑最长路即可。最后取有酒吧的节点中最长路的最大值。#include<bits/stdc++.h>
using namespace std;
inl...
题意定义半连通图为对于 $\forall (u,v)$ ,存在从 $u$ 到 $v$ 或从 $v$ 到 $u$ 的有向路径。给出一个有向图,求最大半连通子图中的节点个数以及最大半连通子图的个数。其中点数 $N\le 100000$ ,边数 $M\le 1000000$ 。题解显然连通图也属于半连通图,那么可以先缩点,记录每个点的新编号 $scc[]$ 以及包含节点个数 $siz[]$ ,并删...
题意有 $N$ 头奶牛,奶牛都喜欢自己,并且有 $M$ 个单向喜欢关系。定义一头被所有奶牛喜欢的奶牛为受欢迎的,求有多少头受欢迎的奶牛。其中 $N\le 10000,M\le 50000$题解把喜欢关系转化为有向图,这样处于同一个强连通分量中的牛肯定是互相喜欢的,那么我们就可以把强连通分量给缩成点。然后反着考虑,如果一个点出度为 $0$ ,那么其他点就不可能受欢迎,受欢迎的就只有这一个点。这...
题意给 $N$ 个人分糖。有 $K$ 个要求,格式为 $(X,A,B)$ ,表示对第 $A$ 个人和第 $B$ 个人有第 $X$ 种限制,用 $S_i$ 表示第 $i$ 个人分得的糖数:$X=1$ , $S_A=S_B$$X=2$ , $S_A<S_B$$X=3$ , $S_A\geq S_B$$X=4$ , $S_A>S_B$$X=5$ , $S_A\le S_B$求最少需要准...
题意给一个有向图,如果有负权回路输出-1,否则输出从起点 $S$ 到各个点的最短路长度,如果不连通输出NoPath。其中点数 $N\le 1000$ ,边数 $M\le 100000$ 。题解做法很显然,就是判负环+最短路。最开始我用的深搜 $spfa$ 判负环,求最短路就顺便继续用,然后就很开心的被卡超时了。正解就是用广搜 $spfa$ ,但我又不想删判负环的所以就写了两个。#includ...
题意定义圈的平均值为一个环上所有边的权值和 $\div$ 边的个数。给出一个有向图,求最小圈的平均值,保留 $8$ 位小数。其中点数 $n\le 3000$ ,边数 $m\le 10000$ 。题解$0/1$ 分数规划,直接二分答案 $mid$ ,然后对每条边减去 $mid$ 再跑 $spfa$ 判负环。如果有负环就缩小上界,否则增大下界。#include<bits/stdc++.h&...
题意给一个 $N\times N$ 网格图,汽车从 $(1,1)$ 走到 $(N,N)$ 。网格图中有加油站,汽车到了加油站就会被强制加油花费 $A$ ;如果没油了也可以设立一个油库并加油,花费 $C+A$ ;如果往回走( $X,Y$ 坐标有一个减小)会花费 $B$ 。汽车邮箱容量为 $K$ ,每走一条边消耗 $1$ 单位的油。求花费的最小值。题解朴素的 $bfs$ 就可以过,不过会成为反向...