一个点必定和不在它集合里的点有边,必定和在这个集合里的点没有边。
我们直接找到某个节点,所有不和它相连的点一定和它在同一个集合里。然后随便找到和它相连的另外一个端点,所有不和它相连的点一定也和它在另外一个集合中,剩下的点肯定隶属于最后一个集合。
最后,再枚举每一条边,判断两端点隶属集合是否不同。
其中无解的情况无非就是在找第一个集合和第二个集合的时候发现有节点出现冲突,还有这些集合之间应该连的边不等于 m,以及枚举边时两端点集合相同。中间判断一下就好。
考虑从中心向外染色。
如果删的话一定删掉最小的。
因此从小到大枚举,取最大值。
简单的。
考虑颜色段均摊,对整体建立两棵主席树,分别维护 $\frac{m_i}{r_i}$ 处 $r_i$ 和 $m_i$ 的和。
对于一个询问 $(l,r,t)$,分成若干上一次修改时间相同的区间,若没有修改,则暴力计算,反之 $t-t_0$ 与 $\frac{m_i}{r_i}$ 比较大小,大于就加 $m_i$ ,小于等于贡献为 $(t-t_0)\times r_i$ 。