某屑比赛题解
某屑比赛题解
T1
直接令
a_1=400,b_1=500 。如果
c_i 是奇数,那么将c_i 拆成[0,1000] 间的整数x_i,y_i ,其中x_i 个位数字为5 ,y_i 个位数字为偶数,然后令a_i=x_i\times 400/1000,b_i=y_i\times 500/1000 。如果
c_i 是偶数,同样地,将c_i 拆成[0,1000] 间的整数x_i,y_i ,其中x_i 个位数字为0 ,y_i 个位数字为偶数,然后令a_i=x_i\times 400/1000,b_i=y_i\times 500/1000 。可以发现,在题目给定数据范围内,总存在合法的拆分方式。
好了,如果你陷入以上的思路,那么说明你成功被部分分误导了。
事实上,你直接令
T2
此题暂无正确做法,下面是原 std 错误做法。
如果对于某个点
接下来将所有黑点连出去的儿子边删掉,整棵树就会被分成若干个连通块,可以将每个连通块视作是一个独立的游戏,那么整个游戏就是这些独立游戏的组合,所以只要求出每个连通块的 SG 函数值即可。
观察得到,每个连通块的 SG 函数值就等于这个连通块中非叶节点的数量,这个可以归纳证明:
单个叶子节点的 SG 函数值显然为
考虑拥有
- 如果它只有一个儿子
y ,那么SG(y)=t-1 ,接下来的一次操作如果仅在儿子子树内部执行,那么得到的状态 SG 函数值就可以取遍[1,SG(y)] ,同时儿子节点中至多有一个节点为黑色,且这个节点必然是叶子节点,直接用这个节点替换掉根u ,SG 函数值就可以取到0 ,所以得到SG(x)=SG(y)+1=t 。 - 如果它有两个儿子
y,z ,那么SG(y)+SG(z)=t-1 ,且y,z 中至多有一个子树内部有黑色节点,不妨假设y 内部有黑色节点,同样的,如果接下来的一次操作仅在z 内部执行,那么得到状态 SG 函数值就可以取遍[SG(y)+1,SG(y)+SG(z)] ,如果用y 内部的节点(包括y )替换掉根,那么 SG 函数值就可以取遍[0,SG(y)] 。两段接起来就是[0,SG(y)+SG(z)] ,所以得到SG(x)=SG(y)+SG(z)+1=t 。
证完就剩下的就很好做了,第一步要赢就是第一步后让各个游戏 SG 函数值异或为
T3
首先猜测任意合法的输入都存在一组解,不然的话出题人的 generator 就会很难写。
由
对于
T4
先不设置根,跑一遍最小树形图,将缩环的过程建树,即将
最后缩环如果得到的不止一个节点,说明原图并不是强连通的,额外设置一个根节点
这个树的性质就是,原图中以节点
所以答案就很简单求了,依次考虑每条边不被除去的概率即可。