Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)

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)

这数数题还是挺好的

原文地址:https://www.cnblogs.com/supy/p/6907729.html