agc027 题解
A \(\color{gray}\bigstar\)
排序。
B \(\color{blue}\bigstar\)
挺困难的。
考虑 \(X\) 的贡献,只和扔垃圾次数有关,也就是需要看出去的次数。
然后考虑如果拿若干个垃圾,肯定是先走到最右边,然后回来的路上拿。
因此给每个点一个值,表示它是在自己那一趟里第几个被拿的。
容易发现每个值对应一个贡献,这个贡献需要乘上它所在位置,并且值越大贡献越大。
贪心,把小的值分配给后面的,然后没了。
C \(\color{green}\bigstar\)
相当于要拿出一个闭合子图,要求每个点都可以到达 AB
。
拓扑排序,每次把不合法的点删掉。
D \(\color{Gold}\bigstar\)
一开始有个直接的想法就是黑白染色,然后每个黑点给一个奇素数,然后白点的值是周围一圈的乘积加一,这样满足一定不会重复而且合法。
但是爆炸,白点上的数太大了。
然后发现不会做。。。
正解是,每个黑点上的数是两个素数的乘积,然后黑点的数是周围一圈 \(\text{lcm}+1\),然后一条主副斜线各给一个素数,这样就满足条件了。
E \(\color{Gold}\bigstar\)
首先一步简单的转化是,\(a\) 看成 \(1\),\(b\) 看成 \(2\),那么合并就是加起来 \(\bmod 3\)。
首先发现,如果一个序列是 abababab...
,那么显然操作不了。
否则证明,这个序列如果 \(\bmod 3\ne 0\),那么可以操作成一个字符。
归纳,就是如果有几个相邻相同的,一定存在一个使得操作之后还有相邻相同的。
然后我们把序列分成若干段,然后每一段都满足 \(\bmod 3\ne 0\),对应一种方案。
贪心,一定是每次选一个最小的前缀。
但是最后可能会多出来一段和为 \(0\) 的。
调整,最后一段先和前面一段合并,然后如果操作不了,说明一定是 ababa
这样的,那么把最后一个扣出,然后前面的再和前面的合并,直到合并到一个可以操作的即可。
F \(\color{blue}\bigstar\)
一步操作之后,就可以确定一个不动的根,把关系列出来拓扑排序即可。