题意给出一棵树,定义 $\mathrm{dep}[i]$ 为 $i$ 的深度,$\mathrm{LCA}(i,j)$ 为 $i$ 与 $j$ 的最近公共祖先。有形如 $\text{(l r z)}$ 的询问,求 $\sum\limits_{l\leq i\leq r} \mathrm{dep}[\mathrm{LCA}(i,z)]$ 。其中点数 $N\le 50000$ ,询问数 $M\l...
题意一棵树,每个节点有权值和信仰值。旅行时只在与起点信仰相同的节点停留,并获得权值。有如下操作:单点修改信仰值单点修改权值查询 $(x,y)$ 路径上权值和查询 $(x,y)$ 路径上权值最大值其中节点数 $N\le 100000$ ,操作数 $M\le 100000$ ,宗教个数 $C\le 100000$ 。题解显然每个宗教需要单独维护,但每个宗教开个线段树空间要爆,所以用动态开点线段树...
双倍经验:洛谷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<...
经过几个月在v2分支咕咕咕的更新再加上不考半期这几天中午的爆肝(颓废),我终于在今天完成了AC的第二版。项目地址: Llf0703/Anti-Cheating下载最新版: Release v2.0在这里就讲讲主要思路什么的吧。主要思路从搜索引擎爬取搜索关键字下的代码从OJ的比赛页面爬取选手提交的满分代码在本地进行比对实现把原版改了一点,将代码保存在data/里拿JXOJ开刀,爬取比赛页面,因...
题意给出一个无向图,对于每个节点 $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$ ,那么其他点就不可能受欢迎,受欢迎的就只有这一个点。这...