【Atcoder】AGC011 C-F简要题解

2019-04-14 15:53发布

class="markdown_views prism-atelier-sulphurpool-light">

*C.Squared Graph

处理出原图GG的所有连通分量,转换后的图相当于所有连通分量两两之间合并,假设当前合并的两个连通分量分别为A,BA,B(注意A,BA,B可能不同),合并后得到CC: 合并规则:
CC(a,b)(a,b)(a,b)(a',b')连通当且仅当存在一个正整数ll,使得在AAaaa o a',在BBbbb o b'都有一条长度为ll的路径。 分类讨论如下:
  • A=1|A|=1CC的连通块数量=B=|B|B=1|B|=1时同理,CC的连通块数量=A=|A|
  • 否则发现可以通过在一条边上反复横跳,可以走出无限种长度的路径,但是不能改变的路径长度的奇偶性。
    所以若A,BA,B都是二分图,转换后有2个连通块,否则只有一个。
dfsdfs染 {MOD}一遍,设有aa个单点,bb个点数>1>1的二分图,cc个非二分图。 ans=a2+2a(na)+2b2+2bc+c2ans=a^2+2a(n-a)+2b^2+2bc+c^2

D.Half Reflector

手玩找规律:
  • 如果第一个是AA,改成BB即可
  • 否则将序列左移一位并取反,最后一位改成AA
可以发现2n2n次以后序列只会有下面两种情况:
  • ABABAB...ABABAB...BBABAB..BBABAB. .轮换
  • BABABA...BABABA...保持不变
情况只取决于序列长度的奇偶。
所以K2nKleq 2n暴力双端队列打标记模拟,否则直接输出答案。

*E.Increasing Numbers

任何一个上升数,都可以写成99个全1数的和(全1数包括0) 假设用了kk个上升数,也就是说安排了9k9kaia_i使得i=19k10ai19=nsumlimits_{i=1}^{9k} frac{10^{a_i}-1}{9}=n,即i=19k10ai=9n+9ksumlimits_{i=1}^{9k} 10^{a_i}=9n+9k 等价于9n+9k9n+9k的数位和9kleq 9k 答案最坏是O(len(n))O(len(n))级别的。暴力模拟即可。

*F.Train Service Planning

这题从昨天下午想到现在,摔 传送门 自己理解的出现的问题: 为什么能把S(a,n)+S(q,n)S(a,n)+S(q,n)调整成KK的倍数? 可以把S(q,n),S(p,n)S(q,n),S(p,n)同时加上一个常数CC使得S(a,n)+S(q,n)S(a,n)+S(q,n)KK的倍数,而所有火车时刻整体后移本质上是等价的。
(也就是说多加了一个p0,q0p_0,q_0的调节变量。。。)
(DZYO神仙代码里SiS_i实际上是Si1S_{i-1},最后调节变量的S0S_0实际上是qn+pn(Sn)q_n+p_n(即S_n)(因为区间不交的式子只能限制S0Sn1S_0-S_{n-1})) 太神仙了,跪了