???
截止至 2019.11.02 已经贺了 47 题
以下是一些笔记
update 11.02 好烦啊不想写新的题,就来补一补题解吧~,有没有大佬带我玩邦邦啊?
【UTR #1】ydc的大树
考虑这么一件事情,如果一个黑色节点为根,那么干掉它的白色节点的数量就是其到所有最深叶子虚树的根的路径上的白色点个数。可以换根DP算出以每个黑色节点为根的虚树的根是什么,大概要维护前三深的儿子以及每个节点子树里面的虚树的根是什么,复杂度 \(\mathcal O(n)\) 。
官方题解的做法比较巧妙,有一个结论是每个点到其最远点的路径都会经过直径的中点,将直径的中点作为根统计一遍信息,然后考虑干掉每一个黑点的白点有哪些即可,复杂度也是 \(\mathcal O(n)\) 。
【UER #1】DZY Loves Graph
考虑撤销操作只会撤销一层,那么每一次正常操作做之前先看一看这次操作会不会被撤销即可,如果要被撤销就直接计算答案,否则再并查集合并。复杂度 \(\mathcal O(n\alpha(n))\) 。
【UR #1】缩进优化
要求 \(\min(\sum_{i=1}^n\lfloor\frac{a_i}{x}\rfloor+a_i\bmod x)\),考虑这个式子的实际意义是可以将 \(\lfloor\frac{a_i}{x}\rfloor\) 个 \(x\) 代价换成 \(1\) 代价,那么实际上要求 \(\min(\sum a_i-(x-1)\sum_{i=1}^n \lfloor\frac{a_i}{x}\rfloor)\) ,枚举一下 \(\lfloor \frac{a_i}{x}\rfloor\) 的值前缀和计算即可,复杂度 \(\mathcal O(n\log n)\) 。
【UR #1】外星人
假设某一步得到了 \(x\) ,那么和比 \(x\) 大的 \(a_i\) 取模都是没有意义的。令 \(dp[x]\) 表示当前已经得到了 \(x\) ,所有比 \(x\) 大的数进行排列的方案数
\[ dp[x\bmod a_i]={N(x)\choose N(x)-N(x\bmod a_i)}N(x\bmod a_i) !dp[x] \ \ \ \ (x\geq a_i) \]其中 \(N(x)\) 是 \(a_i\) 中小于等于 \(x\) 的数的数量。
【UR #2】猪猪侠再战括号序列
对于每一个右括号,当发现它失配的时候,就找到其后面第一个左括号做翻转操作,由于找到的左括号位置单调递增,所以直接大力维护即可。复杂度 \(\mathcal O(n)\) 。
【UR #2】跳蚤公路
可以使用 \(\text{Bellman-Ford}\) 算法判断到一个点的路径上是否有负环,令 \(F[i][j]\) 为走至多 \(i\) 步到 \(j\) 的最短路,如果 \(f[n][i]<f[n-1][i]\) 说明这个点在负环上。然后对于每一个点,记录一下路径上的系数,可以列出这个环是负环的不等式组,大力解完不等式以后对于每个点再解一下能到它的点存在负环的不等式即可。复杂度 \(\mathcal O(nm)\) 。
【UR #2】树上GCD
先容斥一下,算 \(\gcd\) 是 \(i\) 的倍数的方案数,再反演回去。长链剖分一下,对 \(i\) 的范围分讨,当 \(i < \sqrt n\) 时,暴力从重儿子处维护一个桶 \(h[i][j]\) 表示当前 \(\bmod i=j\) 的点的数量,对于 \(i > \sqrt{n}\) ,可以暴力把它的倍数加进去维护,咋一看复杂度是 \(\mathcal O(n\log n \sqrt n)\) 的,但有奥妙重重的证明可以得到它是 \(\mathcal O(n\sqrt n)\) 的。
【UR #3】核聚变反应强度
\(sgcd(x,y)\) 等于 \(\gcd(x,y)\) 去掉其中最小的质因子,乱搞搞就好了。
【UR #3】铀仓库
二分一个答案 \(mid\) ,对于每一个 \(mid\) 最后能选的一定是一个区间,考虑区间的左端点固定,右端点随着左端点的递增而递增,tow-pointer扫一遍就可以 \(\mathcal O(n)\) check了。
【UR #3】链式反应
我不会解微分方程,先写一个 \(n^3\) dp 整理一下变成 \(n^2\) 然后发现可以分治 FFT 就过了,式子的难度没有题目的难度大。这里分治FFT有一个自己卷自己的卷积,所以有细节。分讨一下,当 \(l=0\) 时直接自己卷自己贡献给右边,否则将左边卷上 \([0,r-l]\) ,这样强制大的在前面算了一次贡献,那么要乘个2。
【UR #4】元旦三侠的游戏
当只能做一个操作的时候可以根据奇偶性判断游戏结果,这样优化 DP 复杂度就是对的了。
【UR #4】元旦激光炮
每一次取 \(l=\lfloor \frac{k}{3}\rfloor\) ,假设 \(a_l\) 是 \(a_l,b_l,c_l\) 之中最小的。那么每次可以丢到 \(a\) 中前 \(l\) 个以及 \(b,c\) 中比它们小的,\(k\) 每次至少减少 \(\frac{1}{3}\) 。
【UR #4】追击圣诞老人
用正经的K短路算法做,每次要做的事情是走一条边或者选择下一条边,选择下一条边的事情可以将当前可选链的最小值取出来摆成两条链搞,卡卡常数就过了。
【UR #5】怎样提高智商
输出 \(n\) 个 \(\text{A 0 0 0 0 }\) 。
【UR #5】怎样更有力气
【UR #5】 怎样跑得更快
新年的巧克力棒
手玩+打表发现答案是每一位1对应的2的幂次减1之和。
新年的毒瘤
判一下度数以及是不是割点即可。
【UR #6】破解密码
根据hash直接解方程,注意特判没有逆元的情况。
【UR #6】智商锁
随机化好题,随1000张图然后跑矩阵树定理,最后再meet in middle一下
【UR #6】懒癌
【UR #7】水题生成器
写了个贪心,每次尽可能选大的,然后就过了。证明的话可以看题解,标算的阶乘幂好妙啊,可惜我还不太懂。
【UER #2】信息的交换
【UER #2】谣言的传播
【UR #8】赴京赶考
不难发现行与列是独立的,并查集维护一下就好了。
【UR #8】决战圆锥曲线
一道涨姿势的好题,如果询问满足 \(x_i\geq x_j,y_i \geq y_j\) 时 \(f(x_i,y_i)\geq f(x_j,y_j)\) ,且数据随机,就可以用一个线段树的特技解决它。具体来说就是以 \(x_i\) 为下标线段树,维护区间里的 \(y_i\) 的最大值,每次先查询右边的区间,当发现那区间最大的 \(y_i\) 和区间最大的 \(x_i\) 做一个点求得的答案都不及之前的答案的话,可以直接不查询,复杂度证明类似于调和级数。
【UER #3】开学前的日历
和AGC001E套路类似,都是组合数转格路计数再转递推,这种套路多留心记一下。
【UER #3】开学前的涂鸦
不会正解,写了个乱搞过了。给每条非树边随机一个权值,每条树边的权值等于非树边权值的异或和,那么一个集合删完以后仍然联通的充要条件是删除的边的集合的权值线性无关。取出所有不同的权值,写个爆搜+线性基维护即可。
【UER #4】被删除的黑白树
改为最小化白点数量,可以归纳证明每个叶子到根的路径上的黑点数量等于最浅的叶子的深度,然后贪心即可。
【UR #9】App 管理器
好难啊,现在都不懂,大概就是将每条边定向的过程可以借助当前混合图的连通性判断。
妈妈我在说什么乱七八糟的