好难啊。
T1
首先求连通块的个数可以转化为:总的加入的点的个数-相邻的不同颜色均被点亮的个数。
首先把相邻的同色缩成一个。
然后第一个答案很简单就出来了。
第二个的话。
考虑抽象成图论问题。
颜色(a)和(b)之间有(w)个边相连,那(a,b)之间来一条权值为(w)的双向边。
一条边被点亮,当且仅当两端的颜色点均被点亮。
那么求得相邻的不同颜色均被点亮的个数就是图上当前被点亮边的权值和。
直接用点度数根号平衡维护加点删点就可以了。
T2
挺神仙的。
他既然说了是观测得到的数据,那么至少有一个解。
多解就是-1。
对于红灯之间sort然后建边权为权值差的边,图中任意一个 简单环的权值就是答案。
多解情况就是不存在环。
T3
贪心+dp
首先判断一种情况是否成立的方法是,让能够接到左侧的人全部都到(1),然后判断人数是否大于等于(m)。
这样,我们的放置要求是最终状态,表示不能够再往左接人的状态。
这些最终状态必然对应了所有的可移动状态的最终判断态。
那么我们做(dp)的时候,尽可能地让人向右走,以尽可能地限制人数的增加,使得右侧的人无法走向左侧。
设(dp[i][j])为当前在(i)房间,左侧能走过来的最多有(j)个人,前(i)个房间的总人数的最大值。
这样进行(dp)即可。
只要牢记上述贪心法则,那么(dp)方程变得极其简单,在此不表。