手机的生产
from wangyisong1996
大家好我是wys,我第一次出UER的题感觉很excited
这题的idea是这样来的:
有一天wys在写OJ(雾),发现一个需要fork()的程序输出了很多奇怪的东西,
然而wys并不懂fork(),于是wys去学(wan)习(shua)了一下fork(),
然后发现fork() && fork() || fork()会把一个程序复制5份 ,非常有趣,
所以就有了这道题。
算法零
对于
可以通过第一个测试点获得10分。
算法一
暴力枚举每个fork()的返回值。
复杂度
算法二
显然可以区间DP啊,
时间复杂度
算法三
UER的A题当然是水水的啦!
首先对于只有"&&"的情况,
然后我们就可以把输入的表达式分为若干段,每一段都只有fork()和"&&",
然后从左到右计算前
时间复杂度
信息的交换
from jiry_2
大家好这里是JRY!大家从给UER出题的题数就可以看出来我有多业界良心了吧
其实本来这题也是一道生成树相关的题目..不过在交给VFK之后被改了三四版..现在已经面目全非了。
算法一
我们可以枚举每一张图然后 dfs 判断是否满足答案。
时间复杂度
算法二
如果把排列
于是我们就可以把每一个循环分开来考虑,即考虑每一个联通块的贡献。显然最后得到的置换只和这个联通块的 dfs 树有关,我们可以考虑枚举 dfs 树然后计算每一棵满足条件的 dfs 树对答案的贡献。
因为这张图是无向图,所以 dfs 的时候不可能出现横叉边,只要考虑返祖边就好了。考虑一条返祖边
所以我们可以对每一个联通块枚举 dfs 树,然后计算可能的返祖边数量累加进答案,时间复杂度是
算法三
依然把每一个循环分开来考虑,对于一个循环,我们从这个循环最小下标开始 dfs,可以得到一个这个循环下标的排列,例如循环
证明可以用归纳法,当一棵树只有一个节点的时候这个结论显然,接着考虑一棵以
如果原问题是求树的计数的话,就可以有一种很简单的 DP 方法了:
令
接着和算法二一样,考虑每一棵可能的 dfs 树对答案的贡献,令
到此我们在
我的语文很差求轻喷555
谣言的传播
from Glaceon08,题目是 vfleaking 造的。
算法一
对于第 1 个测试点,
可以获得 10 分。
算法二
由于
当然你要是强行树形 DP 我也资瓷。(不过这题要输出方案耶,虽说不太麻烦但是感觉写DP的是勇士)
可以获得 40 分。
算法三
我们进一步分析问题。考虑告诉你
显然好朋友关系形成的是很多个基环内向树的样子。我们设
- 如果
和 在同一个内向树内,且 是 的祖先,那么影响系数是 。 - 如果
和 在同一个基环内向树内(即看成无向图后,在同一个连通块内), 在环上,设环长为 以及 所在内向树的根到 的距离为 ,那么影响系数就是 。 - 其它情况答案均为
。
显然影响系数和的最大值的上界为
对于每个子树(内向树的子树),我们可以让每个父亲选择一个大儿子,把这条边染黑。这样得到了一个树的链剖分,每条链一定以叶子结尾。对于每条链,我们从上到下,把儿子作为父亲的真理捍卫者。然后每条链的结尾都是叶子,我们就按某种顺序把后一条链顶端作为前一条链的结尾的真理捍卫者,最后还剩下内向树的根结点和一个没有真理捍卫者的叶子。
于是我们对于环,绕一圈,把后一个内向树根作为前一个内向树剩下的那个叶子的真理捍卫者。
某种顺序的话,你可以把链按顶端深度排序搞搞……
我的写法是每次把一棵子树合并到父亲上去……记录子树内的那个剩下的叶子,子树的根是没有作为别人的捍卫者的。然后合并到父亲上去的时候接起来搞搞。这样实际上就是某种链剖分。
这样可以发现每个结点的真理捍卫者都没“挡路”,达到了问题的上界。
可以通过每个测试点的第一问获得 50 分。结合算法二可以获得 70 分。
算法四
最小值其实也很简单 —— 取刚才构造的那组解的逆置换就行了。就是原来
妈呀这为什么是对的?
初始时答案为
- 如果
不在环上且是 的祖先那么对答案贡献 - 如果
在环上且和 在同一个基环内向树那么对答案贡献 (符号见前文)
这样就可以以真理捍卫者的视角考虑问题 —— 原来是尽量别让真理捍卫者挡路,现在是尽量让真理捍卫者挡别人的路。
注意到,在叶子上的真理捍卫者无路如何也不可能挡别人的路,所以他们可以自暴自弃了。
所以还是可以链剖分,按链的顺序依次挡路,然后绕环一圈让剩下的叶子依次挡路。
可以通过所有测试点获得 100 分。如果你某个地方写残了或想残了导致算法变成