摘要:
题面 "题目传送门" 解法 树套树比较苟,考虑整体二分 因为要求第K大,那么我们在二分的时候把$v$大于$mid$的放在右边并修改 修改直接用线段树区间加区间求和即可 时间复杂度:$O(m\ log^2\ n)$ 代码 cpp include define int long long define 阅读全文
摘要:
题面 "题目传送门" 解法 决策单调性比较经典的题吧 题目就是要对于每一个$i$求$f_i=max(a_j a_i+\sqrt{|i j|}))$ 可以发现,$\sqrt n$的增长速度比较慢,所以满足决策单调性 决策单调性是指,如果决策$j$对于$i$已经不是最优的了,那么在后面也一定不是最优的 阅读全文
摘要:
题面 "题目传送门" 解法 LCT模板题 代码 cpp include define N 300010 using namespace std; template void chkmax(node &x, node y) {x = max(x, y);} template void chkmin(n 阅读全文
摘要:
题面 "题目传送门" 解法 树形dp表示感觉太烦,不太会写 考虑贪心 显然每一次应该选深度最大且没有被覆盖的点,然后找到它的爷爷,然后暴力更新 当然,距离大一点贪心也是正确的 时间复杂度:$O(n)$ 代码 cpp include define N 100010 using namespace st 阅读全文
摘要:
题面 "题目传送门" 解法 可以得到一个显然的dp方程 $$f_i=min(f_j+(s_i s_j+i j 1 L)^p)$ 不妨把后面的东西看成$w(j,i)$ 所以就变成$f_i=min(f_j+w(j,i))$ 可以发现,这个式子满足四边形不等式 1D1D的四边形不等式可以直接通过决策单调性 阅读全文
摘要:
题面 "题目传送门" 解法 感觉解法还是挺妙的 将每一个工人都拆成$n$个点,总共$n×m$个点 然后第$i$个工人的第$j$个点表示某辆车是在倒数第$j$个开始修的 然后就转化成修车的时间对总时间的贡献 连接$s$和$n$辆车,容量为1,费用为0, 连接$t$和最后的$n×m$个点,容量为1,费用 阅读全文
摘要:
题面 "题目传送门" 解法 将最大流转化成最小割,然后跑最短路即可 具体如何见图可以参考下图 尽量用dijkstra 代码 cpp include define PI pair define mp make_pair define N 1010 using namespace std; templa 阅读全文
摘要:
题面 "题目传送门" 解法 显然的二分图最大匹配 但是,如果连接$nm$条边的话肯定会出事 考虑如何减少边的数量 将每一个数分解质因数,将所有出现过的质因数放在中间一排 对于每一个$a_i$和$b_i$,和中间一排能整除自己的质因数连边 这样就可以把边数降低到$O(n)$级别 然后dinic即可 代 阅读全文
摘要:
题面 "题目传送门" 解法 环形均分纸牌 和 "这道题" 是一模一样的 时间复杂度:$O(n\ log\ n)$ 代码 cpp include define int long long define N 1000010 using namespace std; template void chkma 阅读全文
摘要:
题面 "题目传送门" 解法 记$mn_i$表示路径长度为$i$最少经过多少条边 然后进行点分治 假设当前的根为$x$,那么先把$x$的子树一个一个访问,访问完一棵子树后更新答案 递归到下面的子树时把影响撤销 时间复杂度:$O(n\ log\ n)$ 代码 cpp include define inf 阅读全文