2020-team2-028
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
[/wiki/2020-team2 返回]
[[Image(Rank.png,1000px)]]
= 概述 =
solved: 5/12
rank: 14
= 流水账 =
开场yyc读A发现是个签到,上机写完提交后WA了,冷静了一下发现自己不会数数把7数成了6,改后过了。
D(...)。
pb中途@了一下沉迷于后三题的cxt表示F好像可做,cxt听完题意后感觉他会一个两个log的小常数的dsu on tree做法,于是直接上机,不久通过。
pb发现K的结论在以前集训中出现过,于是提出了一个map+启发式合并做法,算复杂度发现是log^3^n,pb觉得写unorderedmap就能过,提交后返回TLE,只能改cxt的离线建树做法,最后成功通过。
看榜发现榜上Ldirt很高,HJ有人过,稍微想了想H发现不能套用带环博弈的做法。cxt讲了J后yyc提出一个状压做法,cxt提出一个只考虑外面的环的做法,并认为自己做法更好写,于是交给cxt去想。
yyc想了B的二分判定,pb发现可以树套树维护,于是上机写写写,调了一会过样例但是发现卡空间,提交后竟然WA了。
最后时刻由于B可能要重构优化空间,决定放弃去做L,cxt上去写J。经过一通exgcd+乱搞最后也没能通过,结束后发现别的队做法都怪怪的?
= 总结 =
=== pb: ===
今天非常划水,写了若干不能过题的东西。
数据结构应该算好空间再写,这个确实要背锅,然后有点卡常数也比较烦。
upd:这场好像背大锅,K的复杂度写假了,大概浪费了1h?
=== Creatix: ===
我这场几乎就是闭眼玩家……
开场读了三道可做又没那么简单的题(J,K,L)
然后就是码码码 & 调调调。
我对比赛过程一无所知,只知道自己写的J,K,F,外加知道题意的H,L
然
后
'''我真的会证明L啊!!!'''
cyb 就不管了……
至少 heltion 说过一句话:'''我觉得L没有细节啊?'''
H 是我菜了。
然
后
'''希望以后写题前算一下空间……'''
upd1:重复造轮子补了一下 L。
upd2:写了一下H,然而因为建边不小心double了一下,T了好久。
upd3:写了一下B的分块,我是截至11/10,最短的(71行),第二快的(3744ms)。
upd4:写了一下E。为什么这么好写的题当时没过啊?48行
upd5:写了一下I。~~为什么这么好写的题当时没过啊?~~
=== yyc: ===
比赛策略上感觉说不太清楚有没有问题,可能应该先写J后写B?但是我对于做出L不要做的判断感觉还是正确的,赛后问了通过的队伍他们的做法也都没办法严格的证明,题解的做法高妙许多。
H被卡套路了,时间太久了真的没什么印象。
之后有比较长的一段调整的时间,目前的训练计划是多组织一些个人训练,补一补之前没补的题,涨一涨姿势水平。
= 题解 =
* A:
* B:叮咚~您点的'''树套树卡空间合集''':1,写块状链表。2,离线后每个点开个树状数组。3,线段树套平衡树(或者pbds)。
二分答案mid,那么只需要check一下sum(min(mid,m-1-a[i]))和mid*(r-l+1-k)
权值线段树套平衡树,在权值线段树上二分,用维护位置的平衡树查询
* C:
* D:
* E:直接压状态然后dp
* F:科普一下写法……当要处理树上节点对间信息维护问题的时候,我们可以在每个LCA处理他子树的信息合并。
* 定义Solve(x)表示计算x的子树贡献并且把x中所有点的信息加入一个DS。
* Solve(x)的实现方法是:1,Solve(x 的轻儿子),并且每次Solve完后记得清空DS。2,Solve(x 的重儿子)。3,遍历x的轻儿子,统计贡献。4,将x的所有轻儿子以及x本身加入DS。
* 复杂度分析:容易发现x的重儿子只被x访问过1次,而轻儿子则只被访问过有限次。同理树剖复杂度分析,可知算法复杂度正确。
* G:
* H:二分图博弈。
若包含起点的图的最大匹配,与不包含起点的图的最大匹配'''相等''',则说明存在一个最大匹配,不包含起点。'''那么后手必胜'''。
后手策略:手持任意一张不包含起点的最大匹配图,每次先手无论怎么走,后手都走该点的匹配边。如果某次后手无法操作,说明存在增广路,与这张图是最大匹配矛盾,故后手必胜。
若包含起点的图的最大匹配,与不包含起点的图的最大匹配'''不相等''',则说明所有最大匹配都包含起点。'''那么先手必胜'''。
先手策略:手持任意一张包含起点的最大匹配图,每次后手无论怎么走,先手都走该点的匹配边。
如果某次先手无法操作,说明存在长为偶数的交错路,反转该路径则出现一个不包含起点的最大匹配,与这张图所有最大匹配包含起点矛盾,故先手必胜。
* I:树上随机游走概率dp经典做法,正着dp一遍,每个点的dp值表示为:dp[x] = k * dp[fa] + b。完成后倒着dp一遍求出每个dp值。注意系数较难以用数值维护,故选择矩阵维护。
* J:枚举最外层圆的大小然后DP。
* K:发现,对于每个数,和它能产生贡献的数不会太多(orz pb)。然后类似F的写法。
* L:找到最小的非负整数a1,使得 (a1 * n + n * (n - 1) / 2) % (k + 1) = s % (k + 1) 并且以a1为首的最小总和小于等于s。若找不到,显然无解
* 然后开始增大这个数。首先通过对全局进行若干次+=k+1的操作使得误差小于n * (k + 1),然后每次选取一个...a, (a-k), (a-k+1)...,将它变成...a, (a+1), (a-k+1)...
* 另外,我写完标算以后顺手验证了一下之前我证明的结论的正确性(见下图):如果存在合法的解,那么模(k+1)意义下,最小的解或最大的解一定有至少一组合法。
* (快出一道新题,n,k,s,1e18,判断是否存在合法解)
* ~~我花了好久调整我编辑器的位置才让背景恰到好处~~
[[Image(L的验证.png,1000px)]]
[/wiki/2020-team2 返回]

概述
solved: 5/12
rank: 14
流水账
开场yyc读A发现是个签到,上机写完提交后WA了,冷静了一下发现自己不会数数把7数成了6,改后过了。
D(...)。
pb中途@了一下沉迷于后三题的cxt表示F好像可做,cxt听完题意后感觉他会一个两个log的小常数的dsu on tree做法,于是直接上机,不久通过。
pb发现K的结论在以前集训中出现过,于是提出了一个map+启发式合并做法,算复杂度发现是log3n,pb觉得写unorderedmap就能过,提交后返回TLE,只能改cxt的离线建树做法,最后成功通过。
看榜发现榜上Ldirt很高,HJ有人过,稍微想了想H发现不能套用带环博弈的做法。cxt讲了J后yyc提出一个状压做法,cxt提出一个只考虑外面的环的做法,并认为自己做法更好写,于是交给cxt去想。
yyc想了B的二分判定,pb发现可以树套树维护,于是上机写写写,调了一会过样例但是发现卡空间,提交后竟然WA了。
最后时刻由于B可能要重构优化空间,决定放弃去做L,cxt上去写J。经过一通exgcd+乱搞最后也没能通过,结束后发现别的队做法都怪怪的?
总结
pb:
今天非常划水,写了若干不能过题的东西。
数据结构应该算好空间再写,这个确实要背锅,然后有点卡常数也比较烦。
upd:这场好像背大锅,K的复杂度写假了,大概浪费了1h?
Creatix:
我这场几乎就是闭眼玩家……
开场读了三道可做又没那么简单的题(J,K,L)
然后就是码码码 & 调调调。
我对比赛过程一无所知,只知道自己写的J,K,F,外加知道题意的H,L
然
后
我真的会证明L啊!!!
cyb 就不管了……
至少 heltion 说过一句话:我觉得L没有细节啊?
H 是我菜了。
然
后
希望以后写题前算一下空间……
upd1:重复造轮子补了一下 L。
upd2:写了一下H,然而因为建边不小心double了一下,T了好久。
upd3:写了一下B的分块,我是截至11/10,最短的(71行),第二快的(3744ms)。
upd4:写了一下E。为什么这么好写的题当时没过啊?48行
upd5:写了一下I。为什么这么好写的题当时没过啊?
yyc:
比赛策略上感觉说不太清楚有没有问题,可能应该先写J后写B?但是我对于做出L不要做的判断感觉还是正确的,赛后问了通过的队伍他们的做法也都没办法严格的证明,题解的做法高妙许多。
H被卡套路了,时间太久了真的没什么印象。
之后有比较长的一段调整的时间,目前的训练计划是多组织一些个人训练,补一补之前没补的题,涨一涨姿势水平。
题解
- A:
- B:叮咚~您点的树套树卡空间合集:1,写块状链表。2,离线后每个点开个树状数组。3,线段树套平衡树(或者pbds)。
二分答案mid,那么只需要check一下sum(min(mid,m-1-a[i]))和mid*(r-l+1-k)
权值线段树套平衡树,在权值线段树上二分,用维护位置的平衡树查询
- C:
- D:
- E:直接压状态然后dp
- F:科普一下写法……当要处理树上节点对间信息维护问题的时候,我们可以在每个LCA处理他子树的信息合并。
- 定义Solve(x)表示计算x的子树贡献并且把x中所有点的信息加入一个DS。
- Solve(x)的实现方法是:1,Solve(x 的轻儿子),并且每次Solve完后记得清空DS。2,Solve(x 的重儿子)。3,遍历x的轻儿子,统计贡献。4,将x的所有轻儿子以及x本身加入DS。
- 复杂度分析:容易发现x的重儿子只被x访问过1次,而轻儿子则只被访问过有限次。同理树剖复杂度分析,可知算法复杂度正确。
- G:
- H:二分图博弈。
若包含起点的图的最大匹配,与不包含起点的图的最大匹配相等,则说明存在一个最大匹配,不包含起点。那么后手必胜。
后手策略:手持任意一张不包含起点的最大匹配图,每次先手无论怎么走,后手都走该点的匹配边。如果某次后手无法操作,说明存在增广路,与这张图是最大匹配矛盾,故后手必胜。
若包含起点的图的最大匹配,与不包含起点的图的最大匹配不相等,则说明所有最大匹配都包含起点。那么先手必胜。
先手策略:手持任意一张包含起点的最大匹配图,每次后手无论怎么走,先手都走该点的匹配边。
如果某次先手无法操作,说明存在长为偶数的交错路,反转该路径则出现一个不包含起点的最大匹配,与这张图所有最大匹配包含起点矛盾,故先手必胜。
- I:树上随机游走概率dp经典做法,正着dp一遍,每个点的dp值表示为:dp[x] = k * dp[fa] + b。完成后倒着dp一遍求出每个dp值。注意系数较难以用数值维护,故选择矩阵维护。
- J:枚举最外层圆的大小然后DP。
- K:发现,对于每个数,和它能产生贡献的数不会太多(orz pb)。然后类似F的写法。
- L:找到最小的非负整数a1,使得 (a1 * n + n * (n - 1) / 2) % (k + 1) = s % (k + 1) 并且以a1为首的最小总和小于等于s。若找不到,显然无解
- 然后开始增大这个数。首先通过对全局进行若干次+=k+1的操作使得误差小于n * (k + 1),然后每次选取一个...a, (a-k), (a-k+1)...,将它变成...a, (a+1), (a-k+1)...
- 另外,我写完标算以后顺手验证了一下之前我证明的结论的正确性(见下图):如果存在合法的解,那么模(k+1)意义下,最小的解或最大的解一定有至少一组合法。
- (快出一道新题,n,k,s,1e18,判断是否存在合法解)
我花了好久调整我编辑器的位置才让背景恰到好处
