省选模拟二十九 题解
T1
考场上只想到了枚举拆三元环,拿到60pts
发现其实有一个性质没有用到:
保证将这 个点移除后,剩余的图将不存在环。
假设黑点为没有被钦定的点,白点反之
三白的情况无解
那么一个三元环只能由二黑一白/二白一黑组成,
后者已经固定了,直接选,而前者并不是很好处理
首先对黑白点分别求出子图的Top序(由于是竞赛图,所以Top序是严格的)
接着对于每个黑点处理出它到白点的一个序列(设W->B=1,B->W=0)
把序列按照白点Top序排序
考虑什么样的x才是不合法的
当且仅当存在一个0在1的前面
所以选择的序列一定是1111111111000000的
设f[x]代表最小的0的下标,pos[x]代表x的Top序
那么对于任意两个点x,y(pos[x]<pos[y])
只有在满足f[x]<=f[y]时他们才能够共存
求个LIS即可
T2
转化一下题意那么问题就是每次新加一个字符求所有的后缀的出现次数
直接建出SAM后树剖即可
T3
轮数的限制有点恶心,问的又不是轮数
所以考虑枚举位数i(1,2...i-1都已经是0/1了)
假如a[i]>=2则去操作它
发现若干轮后变成了a[i+1]++,a[i]--,a[last0]++,a[last0+1]--
对所有的0维护一个栈
直接模拟即可