sol - 0x60,61,62
设当前扫描到边x,y,长度为z,x所处的并查集为Sx,y所处的并查集为Sy;
对于任意u属于Sx,v属于Sy,我们可以知道u,v之间必连一条边
但是我们要在保证x,y之间的边属于唯一最小生成树的情况下令u,v之间连边的边权最大,直接设为z+1
那么我们可以知道,增加的边权和为(z+1)*(|Sx|*|Sy|-1) ;
算法时间复杂度为O(NlogNα(N))
(α(N)是并查集的时间复杂度)
求图的最短路径生成树
预处理1号节点最短路,把所有节点按dist排序
使用Prim算法的思想,维护一个最路径生成树T
那么考虑现在正在加入节点p,
我们遍历T找点X满足dist[p] = edge[p][x] +dist[x],统计这样的节点的个数Ans,根据乘法原理,直接乘起来即可
Warning!
本文由 TYQ 创作,采用 知识共享署名 4.0 国际许可协议进行许可。
转载要与作者联系,并需在正文明显处署名作者且注明文章出处。
对了,我永远喜欢C++啊。