这个。缩点相当于把树上一个路径上的边权从1变成0,因为只需要最后输出答案,实际上一个 l , r , u , v l,r,u,v l,r,u,v就是从左到右 l l l时刻到 r r r时刻 u , v u,v u,v之间的边被缩起来了,考虑把缩起来的路径,看做路径加一,我们维护每条边的贡献( s z x ∗ ( n − s z x ) sz_x * (n-sz_x) szx∗(n−szx)),那么答案就是值为 0 0 0的路径贡献和,因为 0 0 0一定是路径上的最小值(最小值不一定是 0 0 0),所以我们维护最小值所在位置的贡献和,和最小值即可维护答案。
写 L C T O ( n log n ) LCT\ O(n\log n) LCT O(nlogn),
但是数组版要 T L E TLE TLE,写了份指针版,居然搞到了 r k 1 rk1 rk1
A C C o d e \mathcal AC \ Code AC Code
#include<bits/stdc++.h>
#define maxn 500005
#define mod 1000000007
#define pb push_back
#define LL long long
using namespace std;
char cb[1<<20],*cs=cb,*ct=cb