题目:http://codeforces.com/problemset/problem/437/D
题意:有n个点,m条边的无向图,保证所有点都能互通,n,m<=10^5
每个点都有权值,每条边的权值定义为这条边连接两点的权值中的最小值。
f(p,q)表示p到q的路径中边权的最小值,如果有多条路经,就取每条路径最小值中的最小值
要求的就是对于所有1<=p<=n,1<=q<=n,p≠q,f(p,q)的平均值
分析:
刚开始是想考虑每条边对总和的贡献,结果没想通。
一个很巧的办法就是贪心的想法,将所有的边按照从大到小排序,然后加入图中,类似Kruskal算法,易得每次加的边对总和的贡献就是2*两个区域节点数的乘积。这个用带权并查集弄一下就行。