Loading

[AGC006F] Blackout

前言

米奇妙妙题, 确实很好

算法

那么接下来就自己推吧

首先, 一个做法是对于 \((x, y)\) , 将 \(x \to y\) 连边, 这样问题转化成:

如果存在 \(x \to y\)\(y \to z\) 那么连 \(x \to z\) , 求最终会有多少条边

这个形式好像就更符合中国宝宝的体质, 那么我们考虑解决

猜测需要在模 \(3\) 意义下建图, 那么以下的阐述都以一个连通块来处理, 最终的答案合并一下就可以

将原图染色, 那么就可以造出一个三集合 \(X, Y, Z\) , 其中每个集合的点都向另一个集合的至少一个点连边, 这种情况下, 感性理解, 最后 \(X\) 每个点向 \(Y\) 每个点连边, \(Y\) 每个点向 \(X\) 每个点连边, \(Z\) 每个点向 \(X\) 每个点连边, 集合内部没有边, 那么答案即为 \(\lvert X \rvert \times \lvert Y \rvert + \lvert X \rvert \times \lvert Z \rvert + \lvert Y \rvert \times \lvert Z \rvert\)

但是当三集合不存在, 也就是原图必然出现了自环或二元环, 怎么办?

这种情况下, 最后连满了还有自环, 一共有点数的平方的答案

还有一种情况, 集合只染成了两个, 那没得更新, 直接处理即可

代码

这个题到目前, 没有找到一种思路自然的做法, 那我就不写代码了, 反正也做不出来

其实是懒

那就后补

总结

对于这种特殊类型的题, 在模数意义下建图是一个常用的 \(\rm{trick}\) , 分类讨论即可

posted @ 2024-12-04 20:06  Yorg  阅读(8)  评论(0)    收藏  举报