勾八题
考虑单组询问,答案显然具有单调性,考虑二分答案,可以求出对于每个 \(i\to i+1\) 走了多少次。将每个移动需求 \(s\to t\) 当成一个有向边,显然需要把所有移动覆盖了,除去这些需求就能算出额外在 \(i\to i+1\) 走了几次。注意到该答案合法当且仅当该图形成一个欧拉路径,构造方式保证了点的度数是满足限制的,所以只需要满足覆盖和边联通条件即可,这里的边指移动需求构成的边集加上初始点,由于答案具有单调性,一个起点的答案就是覆盖的代价和边联通的代价的较大值,考虑分别求出。
多组询问首先将所有点离散化。考虑求覆盖的代价,首先求出每一个 \(i\to i+1\) 在所有移动需求中走了几次,那么我们可以计算出从钦定起点到覆盖这一小段的总代价,考虑起点变化 \(i\to i+1\) ,其影响就是将所有圆上的边的边权减去 \(i\to i+1\) 的长度,同时将 \(i\to i+1\) 的那条边的边权增加 \(L\) ,而这个是可以通过线段树快速维护的。
考虑如何求联通的代价,我们先将初始的出行需求对应的边加入,然后令 \(i\) 到 \(i + 1\) 的边权为这条边第一次出现的时间。考虑所有请求边的相连点构成的点集 \(V\) ,除去初始点外我们实际上只需要保证这个点集联通即可,同时还有一个观察,考虑 \(i, j\in V,\forall i<k<j, k\not\in V\) ,那么对于 \(k\) 的答案就是 \(\max\{ans_j+dist(k,j),\max_w(k,j)\}\) ,其中 \(\max_w(k,j)\) 表示以 \(k\) 为起点时 \(k\to j\) 上的所有边权的最大值。那么我们只需要考虑 \(V\) 的联通性即可,对其他点进行缩点,移动出发点带来的影响可以看做是一次偏移和一条边权的加,那么考虑离线倒着做,就可以用LCT求出该条件下以每个点为起点的最小瓶颈生成树。