思路:
由于一个点最后的颜色取决于最后一次染色,那么我们可以倒着染色, 每染色一个点就将这个点删掉并记录颜色。
用ptr[i] 表示第i 个元素后面第一个未被覆盖的区间
当我们覆盖一个点i 的时候,就把i的指针ptr 向后移动到i+1 的指针指向的位置(指针跳跃)
这样就不会重复覆盖一个点
另外需要注意的是,对于点n+1,我们需要初始化它的指针,否则会无限调用ptr:因为ptr[n+1]=0,而p[0]=0。不过我们也可以通过初始化所有ptr避免这个问题
并查集经典应用之染色模型
最新推荐文章于 2023-06-25 13:08:55 发布