THUWC前集训9

THUWC前集训9

T1

毒瘤题,不管它。

T2

分两种情况,即不使用优惠和支付最贵的(k)条边。

第一种情况的最优方案不优于最短路。

考虑第二种情况,我们枚举第(k)条边的边权(w),将不足(w)的边边权设为0,其余边权减去(w),用求出的最短路+(kw)更新答案。

简单证一下正确性:首先一条路径显然当其第(k)大是我们枚举的权值时取得最小值。然后对于最优的路径(P),其一定会贡献(len(P)).

T3

从NOI网格那题魔改过来的。

首先点权可以放到边权上。

考虑将整个矩形作为一个元素放进优先队列。每次取出一个矩形,那么就相当于将矩形中还没有确定最短距离的点都确定最短距离(注意,由于现在没有点权所以是对的),然后将这些点可达的矩形放进队列。

这样还是很暴力,拉一个kdt/树套树上去显然过不了(10^6)。考虑一维怎么做,要求尽量接近线性。

这东西是可以套路并查集的。将所有连着的已经被确定掉的点和右边第一个还没被确定的点构成并查集上一个连通块并钦定最右边那个是根。然后就不断往右跳顺带合并即可。复杂度(mathcal O(nalpha(n))) (然后那个(alpha)其实可以干掉,懂的都懂)

变成二维就外面套个线段树即可。如果要处理((x1,y1,x2,y2))这个矩形:若当前线段树节点的并查集上((y1,y2+1))已经在同一集合就结束,否则跳过去合并掉并且递归下去。

显然只能合并(O(nm))次。总复杂度(mathcal O(nmlog ncdot alpha(m))).有点卡常(但hehezhou就说了这一个做法啊。。)

My code

原文地址:https://www.cnblogs.com/oierwanhong/p/14203872.html