LOJ 题面传送门 人傻常数大,需要狠命卡--/wq/wq 画个图可以发现两条路径相交无非以下两种情况(其中红色部分为两路径的重叠部分,粉色.绿色的部分分别表示两条路径): 考虑如何计算它们的贡献,对于第一种情况,我们枚举两条路径 LCA 中深度较大者,也就是上图中的 A 点.枚举这个点 \(x\) 以后进而枚举对应的路径,设其为 \(u\to x\to v\),那么我们考虑二分重叠部分的长度 \(len\),那么这个重叠部分要么是 \(u\) 的 \(dep_u-dep_x-len\) 级祖先…
题目地址 https://loj.ac/problem/2343 题解 首先处理出\(f[i]\)表示以当前位置开头(J,O,I)的合法方案数.这个显然可以\(O(n)\)处理出来.然后考虑在每个位置插入三种数. 在位置i插入J:显然对于i后面的所有\(f[j](i<j,s[j]=O)\)有多一个转移点,对\(f[j]\)做个后缀和即可. 在位置i插入O:对于i前面的J,和i后面的I,显然都多一个中转点,于是对J做前缀和,I做后缀和,枚举插入位置i,左右两边相乘取\(\max\)即可. 在位置i…
题意 题目链接 分析 如果走到了下行车站就一定会在前面的某个车站走回上行车站,可以看成是一对括号. 我们要求的就是 类似 代价最小的括号序列匹配问题,定义 f(i,j) 表示到 i 有 j 个左括号没有匹配. 转移时注意一个车站可以有多个左括号和右括号,如果选多个类似无限背包顺着倒着递推一遍即可. 复杂度 \(O(n^2)\) 代码 代码链接…
$ \color{#0066ff}{ 题目描述 }$ 给出一个长度为 \(n\) 宽度为 \(1\) ,高度无限的水箱,有 \(n-1\) 个挡板将其分为 \(n\) 个 \(1 - 1\) 的小格,然后向每个小格中注水,水如果超过挡板就会溢出到挡板的另一边,这里的水是满足物理定律的(在无挡板阻拦的情况下会向低处流),现在有 \(m\) 个条件 \((i,j,k)\),表示从左到右数的第 \(i\) 个格子中,在高度为 \(y+0.5\) 的地方是否有水, \(k=1\) 表示有水,\(k=0\…
这种图论问题都挺考验小思维的. 首先,我们把从 $x$ 连出去两条边的都合并了. 然后再去合并从 $x$ 连出去一条原有边与一条新边的情况. 第一种情况直接枚举就行,第二种情况来一个多源 bfs 即可. code: #include <cstdio> #include <string> #include <vector> #include <queue> #include <algorithm> #define N 100006 #define…
非常好的一道图论问题. 显然,我们要求城市间的最小生成树,然后查询路径最大值. 然后我们有一个非常神的处理方法:进行多源 BFS,处理出每一个城市的管辖范围. 显然,如果两个城市的管辖范围没有交集的话连边一定不是优秀的(一定会有一种都在管辖范围之内的连边方式来代替这种连边方式) 然后由于每一个点只属于一个城市的管辖范围,所以每个点只会扩展一次,这个 BFS 的复杂度是线性的. code: #include <bits/stdc++.h> #define N 2006 #define M 200…
题目链接 以时间为下标建线段树.线段树每个节点开个vector. 对每条边在其出现时间内加入线段树,即,把这条边按时间放在线段树的对应区间上,会影响\(O(\log n)\)个节点. 询问就放在线段树的对应叶子节点上. 然后对整棵树DFS,当进入一个节点时,将这个点代表的这段区间中出现的边全部加到图里,即合并起来,之后在离开这个点时撤销. 可以用不路径压缩.按秩合并的并查集维护连通性.这样就可以撤销了. 合并时用栈记录合并前状态,合并前的父节点用\(x\)或是\(fa[x]\)都行,因为合并的时…
LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得\(sumA_{x_{j}} + sumB_{j} \leq T_{j}\) 然后我们相当于从\((0,0)\)走到\((n,m)\)一条路径,如果\(i,y_{i}\)在路径上或路径上方,那么就加上\(P_{i}\),如果\(x_{j},j\)在路径上或路径下方,就加上\(Q_{j}\) 我们加上…
LOJ#3033. 「JOISC 2019 Day2」两个天线 用后面的天线更新前面的天线,线段树上存历史版本的最大值 也就是线段树需要维护历史版本的最大值,后面的天线的标记中最大的那个和最小的那个,区间中最小的可用天线值,区间中最大的可用天线值 \(i\)可以被\(j\)用到,那么\(j\)在\([i + A_{i},i + B_{i}]\)中,我们枚举右端点的时候,假如到了\(i + A_{i}\)就把\(i\)标记为可用,如果到了\(i + B_{i} + 1\)就把\(i\)标记为不可用…
Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少有一个棋子,也至少有一个空位. 游戏的目标是:在还没有放棋子的格子上依次放棋子,并填满整个棋盘.在某个格子上放置棋子必须满足以下条件之一: 这个格子的上下一格都放有棋子: 这个格子的左右一格都放有棋子. JOI 君想知道有多少种从初始状态开始,并达到游戏目标的方案,这个答案可能会非常大.请你帮 JO…