博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
华南理工大学“三七互娱杯”程序设计竞赛 G: HRY and tree
阅读量:5133 次
发布时间:2019-06-13

本文共 537 字,大约阅读时间需要 1 分钟。

题意:给出一棵树,定义两点间代价为两点路径上最长的边权,问任两点间的代价和。

解法:这道题的解法十分巧妙:直接用Kruskal对这棵树求最小生成树,然后对于即将加入到MST的这条边(u,v,w),这条边对答案的贡献是size[u]*size[v]*w。为什么?因为我们是从小到大把边加入,所以对于两点分别位于u联通块和v联通块的路径上最长的边必定是(u,v,w),所以求完MST之后就是答案了。

#include
using namespace std;typedef unsigned long long uLL;const int N=1e6+10;int T,n,fa[N],size[N];struct edge{ int x,y,z; bool operator < (const edge &rhs) const { return z
>T; while (T--) { scanf("%d",&n); for (int i=1;i

 

转载于:https://www.cnblogs.com/clno1/p/10999084.html

你可能感兴趣的文章
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
【题解】青蛙的约会
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
Red and Black(poj-1979)
查看>>
安装 Express
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>