随笔分类 - 瞎搞
摘要:传送门 考虑一个子树里是怎么划分的,维护划分出来的每个集合的最大值,这个可以用一个 $multiset$ 维护 设 $S[x]$ 表示节点 $x$ 的子树中,最优划分 划分出来的每个块的节点最大值 首先叶子节点的集合显然只有它本身 然后考虑子树之间的合并,设两个子树根节点为 $x,y$,因为两个子树
阅读全文
摘要:传送门 超级钢琴+可持久化$Trie$ 同样设三元组 $(o,l,r)$ 表示左端点为 $o$,右端点 $\in [l,r]$ 的区间的最大异或值,这个东西可以用可持久化 $Trie$ 来维护 一开始把所有 $(i,i,n)$ 扔到堆里,然后每次取出计算贡献,设取得最大异或值的位置为 $t$,然后再
阅读全文
摘要:传送门 考虑维护前缀和 $sum[i]$ 那么对于每一个位置 $i$ ,左端点为 $i$ 右端点在 $[i+L-1,i+R-1]$ 区间的区间最大值容易维护 维护三元组 $(o,l,r)$ ,表示左端点为 $o$ ,右端点 $\in [l,r]$ 的区间最大值,然后把它扔到一个堆里,每次弹出最大值计
阅读全文
摘要:传送门 考虑把总区间长度减去最多能减少的区间长度 把所有区间离散化,对每一小段计算贡献 分类讨论一波,对于边界 $i,i+1$ ,设它们之间距离 $d$,$i$ 属于 $x$ 考察队的边界,$i+1$ 属于 $y$ 考察队的边界: $i$ 为左边界,$i+1$ 为左边界,显然如果给 $x$ 钥匙就可
阅读全文
摘要:传送门 把时间看成数,菜肴看成位置 考虑一个位置填什么数很麻烦 考虑一个数放在什么位置 一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了一个 $DAG$ 考虑当前最小的数给谁,显然是当前没有入度的且编号最小的点 所以可以直接按拓扑序把数
阅读全文
摘要:传送门 显然不能直接考虑图长什么样 考虑如何构造一个图,让一个 $B$ 序列尽可能合法 发现对于一些点,如果能让它们先弱联通,(一个节点指向下一个节点,形成一条链) 那么对于最后一个节点,它想缩几个联通块都行,可以证明,这样可以包括所有其他情况形成的 $B$ 序列 感性理解因为这样可以消耗最少的边来
阅读全文
摘要:传送门 显然题目给的图构成一个基环树森林 对于每个基环树单独考虑,显然每个都走直径是最优的 考虑如何求出基环树的直径 把直径分为两种情况考虑,首先可以找出环 因为直径可能不在环边上,所以对每个环上节点的子树进行一遍 $dfs$,求出每个节点子树的直径 维护 $dis[x]$ 表示节点 $x$ 到叶子
阅读全文
摘要:传送门 A.The Doors 看懂题目就会写的题 给一个 $01$ 序列,找到最早的位置使得 $0$ 或 $1$ 已经全部出现 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cm
阅读全文
摘要:传送门 矩阵很大,但是发现 $n$ 很小,从这边考虑,对于一个一堆小矩阵放在一起的情况 考虑把每一块单独考虑然后方案再乘起来 但是这些奇怪的东西很不好考虑 所以暴力一点,直接拆成一个个小块 但是这样我们还要考虑到小矩形的限制,设 $f[i][S]$ 表示现在考虑完第 $i$ 个小块,小矩形的限制满足
阅读全文
摘要:传送门 区间修改区间询问,考虑线段树维护 对于一个询问 $l,r$ ,如果我们能求出总每种情况的总花费,那么最终答案就是总花费除 $C^2_{r-l+1}$ 为了方便维护把每条边看成点,那么线段树有 $n-1$ 个叶子节点 考虑线段树两个相邻区间 $lc,rc$ 合并成区间 $O$ 显然先设 $su
阅读全文
摘要:传送门 考虑一个位置答案传递性,如果某个位置的红宝石转动确定了,那么会引起连锁反应: 如图,绿色的转动确定了,那么那两个蓝色的转动也确定了 自己手玩一下,发现如果有解那么随便找一个开始然后一路玩下去最后一定会有解,如果一旦有冲突那么之后不管怎么调整也都一定无解,(因为调整最后又会绕回自己继续冲突)
阅读全文
摘要:传送门 首先显然我们可以维护一个二维前缀和 $O(1)$ 求出任意一个矩形的值 考虑枚举大矩形的左上角,并维护当前矩形中,小矩形的最小值 放一个图: 维护小矩形最小值先考虑暴力怎么搞 同样考虑枚举左上角,那么大概枚举过程可以长成这个样子: 发现可以先预处理出同一排竖下来的小矩形最小值,显然这个可以直
阅读全文
摘要:传送门 原题传送门... 考虑从后往前推 对于一个序列,记 $M$ 为 $1$, $F$ 为 $-1$ 考虑这个序列的后缀和: F F F M M M M M F F 0 1 2 3 2 1 0 -1 -2 -1 可以发现如果某个时刻后缀和大于 $1$ 了,那么序列就不合法 反之序列一定合法,证明
阅读全文
摘要:传送门 考虑一颗 $n$ 个叶节点的菊花树的情况,边权均为1 显然直径数为 $n*(n-1)/2$(20分) 考虑两颗菊花树的情况: 那么直径有 $a*b$ 个,但是对于 $n$ 为大质数的情况还是不够(40分) 那么考虑三个菊花树的情况: 答案也十分显然,为 $a*(b+c)+b*c$ 所以枚举
阅读全文
摘要:传送门 二叉堆计数显然可以递归处理 考虑两个二叉堆合并时的情况: 最小的数肯定在根的位置 设此时总的节点数为 $tot$,堆$A$的节点数为 $a$,我们显然可以从 $tot-1$ 个数中随意选出 $a$ 个数放到堆$A$中,剩下的数放到堆$B$中($tot-1$是因为根的值已经确定了) 考虑堆$A
阅读全文
摘要:传送门 人在各个太空站流动,所以显然的网络流模型 因为不同时间能走的边不同,所以显然按时间拆点 但是因为不知道要多少时间,所以要枚举时间,动态拆点 每一点向下一个时间的同一点连流量为 $INF$ 的边,表示时间的转移 因为知道时间,所以可以求出每站的下一站,流量显然就是对应太空船的容量 每多一时间就
阅读全文
摘要:传送门 在同一横坐标,轮廓只会被最高的楼房影响 所以考虑用 $multiset$ 维护当前的每个楼房高度 轮廓线显然只有出现楼房最高高度变化时会出现转折点 把一个楼根据左右边界分成两个东西,左边时把高度加入 $set$,到了右边再从 $set$ 里把该高度删除 每次更新 $set$ 时判断一下高度变
阅读全文
摘要:传送门 发现 $k<=10^9<13!$ 所以只有最后几位会变 前面一大段都是固定的 考虑求前面一大段的贡献 $n$最大就 9 位,直接数位DP就好了(爆搜也是可以的) 考虑后面几位的贡献 用逆康托展开求出每一位的值然后暴力判断就好了 代码有一些细节:
阅读全文
摘要:传送门 斯坦纳树 给一个联通图,求 $k$ 个关键点联通的最小生成树权值 设 $f[o][i]$ 表示当前关键点选择状态为 $o$ ,以点 $i$ 为根的树的最小权值 初始 $f[1<<(i-1)][i]=val[i]$ ,$val[i]$ 表示点 $i$ 的权值 那么从小到大枚举状态 $o$ 对于
阅读全文
摘要:传送门 考虑先随便找一个点作为根,然后再慢慢移动根,这样一步步走到最优的点 设 $sum[x]$ 表示节点 $x$ 的子树的军队数,$len(x,y)$ 表示 $x,y$ 之间边的长度 那么对于根节点 $x$ 的一个儿子 $v$,考虑把儿子搞为根时,代价的改变量 $v$ 的子树内的军队消耗减少,共减
阅读全文