A 模拟
B 发现对于每个连通块,只有为完全图才成立,然后就dfs
C 构造 想了20分钟才会,一开始想偏了,以为要利用相邻NO YES的关系再枚举,其实不难。。
考虑对于顺序枚举每一个NO/YES,与前一个需要用的的字符串有k-1个交集,只多了一个string
于是只要保证k-1个string不同,只通过当前的string来影响答案,
若YES,开一个新的串; NO,则和第一个串一样,以此让这个相同串在下一次枚举中消失。。
//怎么想到? 其实NO可能有多个相同名字,关系就很乱了,我们希望只有1个名字重复,且只重复1次,然后再接着考虑
D 考虑如何求树上所有点对的距离和 : 只需求出每条边对答案的贡献累加即可。
原问题转化为求所有 =L/k + f(L,k)/k f(L,k):L最少加几才能是k的倍数
第一部分可以直接O(n)求,f(L,k)可以通过L%k的值得出,问题转化为求所有L%k的值为0..k-1分别有几组。
待统计的二点形成链,链有2种,一种是有某个点为LCA,否则是另一种。
对于情况1,直接dp O(nk)
情况2,dp记录前缀和,将孩子信息合并,O(n*k^2)
这数数题还是挺好的