蒟蒻又发现自己还没写过LCT…… 首先显然按照权值a从小到大排序,维护b的最小生成树.然后直接扫,代价是加入b的最大值,然后动态加边,因为有边权,所以在lct中边应该理解为点.每次连接(u,v)时,若不连通则直接连起来,反之则需选择b最大的边断开. #include<bits/stdc++.h> using namespace std; ; struct node{int a,b,x,y;}q[N]; int n,m,len,fa[N],lc[N],rc[N],rev[N],b[N],val[…