tyvj 1391 走廊泼水节【最小生成树】By cellur925
题目传送门
题意简化:给你一棵树,要求你加边使它成为完全图(任意两点间均有一边相连) ,满足原来的树是这个图的最小生成树。求加边的价值最小是多少。
考虑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相关推荐
- TYVJ 1391 走廊泼水节
描述 我们一共有N个OIER打算参加这个泼水节,同时很凑巧的是正好有N个水龙头(至于为什么,我不解释).N个水龙头之间正好有N-1条小道,并且每个水龙头都可以经过小道到达其他水龙头(这是一棵树,你应该 ...
- Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal
$ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...
- CH - 6201 走廊泼水节(最小生成树,水题)
题目链接:点击查看 题目大意:给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树(增加的边权必须大于最小生成树上这两个点的边权),求增加的边的边权总和的 ...
- Acwing 346.走廊泼水节(最小生成树)
Acwing 346.走廊泼水节 题意 给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树. 求增加的边的权值总和最小是多少. 注意: 树中的所有边 ...
- 走廊泼水节(最小生成树求最小完全图)
传送门:走廊泼水节 思路:在求最小生成树的过程中会有很多连通块,合并每一个连通块时同时也要将两个连通块连成一个完全图,合并联通块的w是最长的一条边,也要保证是完全图求最小生成树时不变的一条边,所以额外 ...
- AcWing346.走廊泼水节
刷题之路-图论 AcWing346.走廊泼水节 传送门 题目描述 做题思路及代码 /* 将树中的所有边按权值升序排序,依次扫描, 例如取出边(u,v,w),已经和u相连的点都需要和已经和v相连的点连线 ...
- CH 6201 走廊泼水节
玄学之门 题目: 分析: 代码: 题目: 传送门 分析: 类似kruskalkruskalkruskal算法的过程,对于一条边,如果它们的两个点属于两个不同的集合,那么这些集合间都要连边,为保证最小生 ...
- 346. 走廊泼水节
给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树. 求增加的边的权值总和最小是多少. 注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数 ...
- 【图论专题】最小生成树的扩展应用
整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...
最新文章
- USACO JANUARY——矩形[rects]
- linux raid md,具有不可预测功耗的情况下的Linux MD RAID弹性
- 设计模式到底离我们有多远
- 12_02_Linux软件管理之二rpm
- 【分享】Web前端开发第三方插件大全
- Objective-C语法与Cocoa框架
- POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】
- 实习成长之路:DelayQueue多线程下的延迟队列的使用
- mac编写python_刚到手Mac写Python的一个简单问题
- 3.第一个HelloMaven/快速入门
- 欺骗的艺术——谈谈社会工程学
- 基于粒子群算法的IEEE-30节点系统MATLAB配网无功优化仿真,有各变量参数,及仿真程序
- 如何使用Java开发QQ机器人 方法二
- android 平板怎么截图,小米平板4怎么截图 小米平板4截屏的三种方法
- 服务器w7系统怎么开启端口,win7如何打开21端口|win7开启21端口的方法
- 【我的Android进阶之旅】解决Jenkins编译出现的Gradle错误:Gradle build daemon disappeared unexpectedly
- p2p与反p2p的激战--资料搜集
- 如何切换Echarts主题
- 通过安卓逆向来学习安卓开发
- 北宋政坛翘楚,文坛领袖大串联