CF141E Clearing Up
一个比较显然的做法是这样的,先拎出一棵 \(S\) 数量最多的生成树(主要是为了保证 \(S\) 数量大于 \(M\),无需分类讨论,如果没有或者 \(S\) 数量小于 \(\frac{n - 1}{2}\),那么无解),然后枚举每条不在上面的 \(M\) 边,加上去后必然构成一个环,如果环上至少有一条 \(S\) 边,删掉替换即可。
我们发现这样的时间复杂度就可以通过了,但是实现十分的不牛。
我们发现这样一个事情,在加入 \(M\) 边数量小于等于 \(\frac{n - 1}{2}\) 时,只要 \(M\) 边不构成一个环,都是可以加入的,\(S\) 边后加入必定符合条件。所以我们只需要将 \(M\) 边单独拎出来做一遍边数上限为 \(\frac{n - 1}{2}\) 的生成树,然后再在其基础上加 \(S\) 边即可。
然后就是 \(O(m\log n)\) 爆标了。

浙公网安备 33010602011771号