将每条边定向,由度数小的指向度数大的。然后统计答案,复杂度为所有点入度乘出度的和。对于度数 $ \le O(\sqrt m)$ 的点,出度最多为 $O(\sqrt m)$ ,入度和最多为 $O(m)$ ,复杂度 $O(n \sqrt m)$ ;对于度数 $\ge O(\sqrt m)$ 的点,由于所有点度数和为 $O(m)$ ,所以出度最多为 $O(\sqrt m)$ ,入度和最多为 $O(\sqrt m)$ 。故复杂度 $O(m \sqrt m)$ 。
查看代码
1 |
|
\begin {array}{c} \mathfrak {One Problem Is Difficult} \\\\ \mathfrak {Because You Don't Know} \\\\ \mathfrak {Why It Is Diffucult} \end {array}
将每条边定向,由度数小的指向度数大的。然后统计答案,复杂度为所有点入度乘出度的和。对于度数 $ \le O(\sqrt m)$ 的点,出度最多为 $O(\sqrt m)$ ,入度和最多为 $O(m)$ ,复杂度 $O(n \sqrt m)$ ;对于度数 $\ge O(\sqrt m)$ 的点,由于所有点度数和为 $O(m)$ ,所以出度最多为 $O(\sqrt m)$ ,入度和最多为 $O(\sqrt m)$ 。故复杂度 $O(m \sqrt m)$ 。
1 | #include <cstdio> |