[USACO17OPEN]Switch Grass P

Switch Grass P

题解 

由于答案一定是某一条边的边权,而两点只有当颜色相同时才会被忽略掉,所以可以发现这条边一定是在该图的最小生成树上。

于是我们可以先将这棵树给建出来,考虑每个点与他儿子连边的贡献。

我们可以先给每个点所有儿子的颜色开一个multiset,记其为CLS_{u,c},存储它和所有颜色为c的儿子的边长,而每条边只会被装进去一次,总共n-1条边,空间不会炸,再用一个multiset存储每个点的\min\{CLS_{u,c}\}

我们可以再用一棵线段树维护每个节点与其儿子的最近异色点对的连接边长。

所以对于一个节点,它的答案只会是前两者的大小,修改查询等操作都很容易维护。

源码

#include<cstdio>
#include<cmath>
#include<cstring>
#i
posted @ 2020-08-30 22:03  StaroForgin  阅读(11)  评论(0)    收藏  举报  来源