题目传送门

题意简化:给你一棵树,要求你加边使它成为完全图(任意两点间均有一边相连) ,满足原来的树是这个图的最小生成树。求加边的价值最小是多少。


考虑Kruskal的过程,我们每次找一条最短的,两边的集合没有并在一起的两条边。

而且有个结论:边权最小的边一定在图的最小生成树中。于是我们加的所有边一定要比原边权恰好多1,这样是最贪心的。

然后每次加边的时候一定加的是$size[x]*size[y]-1$这么多个。

Code

 1 #include<cstdio>
 2 #include<algorithm>
 3
 4 using namespace std;
 5 typedef long long ll;
 6
 7 int T,n;
 8 int fa[7000],size[7000];
 9 ll ans;
10 struct node{
11     int f,t,w;
12 }edge[50000];
13
14 bool cmp(node a,node b)
15 {
16     return a.w<b.w;
17 }
18
19 int getf(int x)
20 {
21     if(x==fa[x]) return x;
22     return fa[x]=getf(fa[x]);
23 }
24
25 int main()
26 {
27     scanf("%d",&T);
28     while(T--)
29     {
30         scanf("%d",&n);
31         for(int i=1;i<n;i++)
32             scanf("%d%d%d",&edge[i].f,&edge[i].t,&edge[i].w);
33         sort(edge+1,edge+1+n-1,cmp);
34         for(int i=1;i<=n;i++) fa[i]=i,size[i]=1;
35         for(int i=1;i<n;i++)
36         {
37             int pp=getf(edge[i].f);
38             int qq=getf(edge[i].t);
39             if(pp==qq) continue;
40             ans+=1ll*(size[pp]*size[qq]-1)*(edge[i].w+1);
41             fa[pp]=qq;
42             size[qq]+=size[pp];
43         }
44         printf("%lld\n",ans);
45         ans=0;
46     }
47     return 0;
48 }

View Code

转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9785055.html

tyvj 1391 走廊泼水节【最小生成树】By cellur925相关推荐

  1. TYVJ 1391 走廊泼水节

    描述 我们一共有N个OIER打算参加这个泼水节,同时很凑巧的是正好有N个水龙头(至于为什么,我不解释).N个水龙头之间正好有N-1条小道,并且每个水龙头都可以经过小道到达其他水龙头(这是一棵树,你应该 ...

  2. Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal

    $ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...

  3. CH - 6201 走廊泼水节(最小生成树,水题)

    题目链接:点击查看 题目大意:给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树(增加的边权必须大于最小生成树上这两个点的边权),求增加的边的边权总和的 ...

  4. Acwing 346.走廊泼水节(最小生成树)

    Acwing 346.走廊泼水节 题意 给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树. 求增加的边的权值总和最小是多少. 注意: 树中的所有边 ...

  5. 走廊泼水节(最小生成树求最小完全图)

    传送门:走廊泼水节 思路:在求最小生成树的过程中会有很多连通块,合并每一个连通块时同时也要将两个连通块连成一个完全图,合并联通块的w是最长的一条边,也要保证是完全图求最小生成树时不变的一条边,所以额外 ...

  6. AcWing346.走廊泼水节

    刷题之路-图论 AcWing346.走廊泼水节 传送门 题目描述 做题思路及代码 /* 将树中的所有边按权值升序排序,依次扫描, 例如取出边(u,v,w),已经和u相连的点都需要和已经和v相连的点连线 ...

  7. CH 6201 走廊泼水节

    玄学之门 题目: 分析: 代码: 题目: 传送门 分析: 类似kruskalkruskalkruskal算法的过程,对于一条边,如果它们的两个点属于两个不同的集合,那么这些集合间都要连边,为保证最小生 ...

  8. 346. 走廊泼水节

    给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树. 求增加的边的权值总和最小是多少. 注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数 ...

  9. 【图论专题】最小生成树的扩展应用

    整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...

最新文章

  1. USACO JANUARY——矩形[rects]
  2. linux raid md,具有不可预测功耗的情况下的Linux MD RAID弹性
  3. 设计模式到底离我们有多远
  4. 12_02_Linux软件管理之二rpm
  5. 【分享】Web前端开发第三方插件大全
  6. Objective-C语法与Cocoa框架
  7. POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】
  8. 实习成长之路:DelayQueue多线程下的延迟队列的使用
  9. mac编写python_刚到手Mac写Python的一个简单问题
  10. 3.第一个HelloMaven/快速入门
  11. 欺骗的艺术——谈谈社会工程学
  12. 基于粒子群算法的IEEE-30节点系统MATLAB配网无功优化仿真,有各变量参数,及仿真程序
  13. 如何使用Java开发QQ机器人 方法二
  14. android 平板怎么截图,小米平板4怎么截图 小米平板4截屏的三种方法
  15. 服务器w7系统怎么开启端口,win7如何打开21端口|win7开启21端口的方法
  16. 【我的Android进阶之旅】解决Jenkins编译出现的Gradle错误:Gradle build daemon disappeared unexpectedly
  17. p2p与反p2p的激战--资料搜集
  18. 如何切换Echarts主题
  19. 通过安卓逆向来学习安卓开发
  20. 北宋政坛翘楚,文坛领袖大串联

热门文章

  1. HTML中放置CSS的三种方式和CSS选择器
  2. Quartz2D指定显示范围
  3. [笔记]VI编辑器的学习
  4. WTL 学习博文地址
  5. 第七次发博不知道用什么标题好
  6. 067:【Django数据库】ORM查询条件详解-range
  7. 【前端工程师手册】JavaScript作用域拾遗
  8. 怎样获取linux命令帮助?
  9. Oracle DBA课程系列笔记(16)
  10. 如何提高安卓代码的质量和语法