题目链接:

CH6201

【简化版题意】给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树。求增加的边的权值总和最小是多少。

输入格式

本题为多组数据~
 第一行t,表示有t组测试数据
 对于每组数据
 第一行N,表示水龙头的个数(当然也是OIER的个数);
 2到N行,每行三个整数X,Y,Z;表示水龙头X和水龙头Y有一条长度为Z的小道

输出格式

对于每组数据,输出一个整数,表示修建的所有道路总长度的最短值。

样例输入

2
3
1 2 2
1 3 3
4
1 2 3
2 3 4
3 4 5 

样例输出

4
17 

数据范围与约定

  • 每个测试点最多10组测试数据
     50% n<=1500;
     100% n<=6000
     100% z<=100

样例解释

第一组数据,在2和3之间修建一条长度为4的道路,是这棵树变成一个完全图,且原来的树依然是这个图的唯一最小生成树.

  

  • 思路:先将所有边按边权排序,然后执行一个类似于Kruskall的过程,每次扫描到边(x,y,z)时,若x,y不在同一个集合,此时应该合并Sx,Sy,此时,对于x所在集合中除x之外的点u,y所在集合中除y之外的点v,完全图中u与v之间肯定要连一条边,有因为要保证边(x,y)一定在最小生成树中,就必须让(x,y)是连接两个集合的边权最小的边。所以(u,v)的边权最小为z+1.而Sx与Sy之间最后一共会增加(size[x]*size[y]-1)条边,所以把(z+1)*(size[x]*size[y]-1)累加到答案中即可

  代码:

  

#include <cstdio>
#include <algorithm>
#include <cctype>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std; const int N=6010;
long long ans=0;
int fa[N],size[N],T,n;
struct E{int x,y,z;}e[N];
bool operator<(const E &n1,const E &n2){return n1.z<n2.z;} inline int get(int x){
if(x==fa[x]) return x; return fa[x]=get(fa[x]);
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1 ; i<n ; i++) scanf("%d %d %d",&e[i].x,&e[i].y,&e[i].z);
for(int i=1 ; i<=n ; i++) fa[i]=i,size[i]=1;
sort(e+1,e+n); ans=0;
for(int i=1 ; i<n ; i++)
{
int x=get(e[i].x),y=get(e[i].y);
if(x==y) continue;
fa[x]=y; ans+=(long long)(size[x]*size[y]-1)*(e[i].z+1);
size[y]+=size[x];
}
printf("%lld\n",ans);
} return 0;
}

  

CH6201走廊泼水节的更多相关文章

  1. CH6201 走廊泼水节【最小生成树】

    6201 走廊泼水节 0x60「图论」例题 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我 ...

  2. CH6201 走廊泼水节[最小生成树]

    描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我们一共有N个OIER打算参加这个泼水节,同时 ...

  3. 「CH6201」走廊泼水节

    「CH6201」走廊泼水节 传送门 考虑 \(\text{Kruskal}\) 的过程以及用到一个最小生成树的性质即可. 在联通两个联通块时,我们肯定会选择最小的一条边来连接这两个联通块,那么这两个联 ...

  4. [Tvvj1391]走廊泼水节(最小生成树)

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

  5. 【CH6201】走廊泼水节

    题目大意:给定一棵树,要求增加若干条边,将其转化为完全图,且该完全图以该树为唯一的最小生成树,求增加的边权最小是多少. 题解:完全图的问题一般要考虑组合计数.重新跑一遍克鲁斯卡尔算法,每次并查集在合并 ...

  6. P1391 走廊泼水节

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景  话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老 ...

  7. 奇葩最小生成树--->走廊泼水节(tyvj1391)

    题目描述 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老江湖了,当然很快就发现了我们的小阴谋,于是他准备好水枪迫不及待的想要加入我们了. ...

  8. CH 6201 走廊泼水节题解

    题目链接:CH6201 当时在海亮考试的第一题: 心得:其实一个算法是要真正理解这个思路和过程,而并不是单单知道它是用来写什么题的: 思路:n个节点有n-1条边,把这n-1条边按照权值从小到大排序,有 ...

  9. CH 6021 走廊泼水节

    描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我们一共有N个OIER打算参加这个泼水节,同时 ...

随机推荐

  1. IDEA错误的忽略了智能补全代码,导致正确的代码自动提示不出来的问题

    标题说起来有点绕,当今大部分IDE都提供 Alt+Enter 呼出自动补全菜单的功能,IDEA也不例外,今天手残了一下,具体问题如下: 1. 通常我们键入一个自定义类时IDEA会自动提示为红色,表示缺 ...

  2. 最长的相同节点值路径 · Longest Univalue Path

    [抄题]: Given a binary tree, find the length of the longest path where each node in the path has the s ...

  3. C#中读写配置参数文件(利用Windows的API)

      读配置文件与写配置文件的核心代码如下:   [DllImport("kernel32")] // 读配置文件方法的6个参数:所在的分区(section).键值. 初始缺省值. ...

  4. Tftp上传、下载

    上传 tftp -g -r filename serverip 下载 tftp -p -l filename serverip

  5. code2102 石子归并2

    划分dp 注意环形,需要把原数复制成两份再进行,详见: http://www.cnblogs.com/FuTaimeng/p/5427426.html 初始条件:dp[i][i]=0 转移方程:dp[ ...

  6. 白盒测试实践--Day5

    累计完成任务情况: 阶段内容 参与人 完成个人情况说明并提交作业 全体 汇总作业,查漏补缺,完成代码测试总结 小靳.小龙 完成测试小结 小黄.小尹 完成静态代码检查结果报告 小靳 完成JUnit脚本编 ...

  7. 白盒测试实践-任务进度-Day03

    所使用静态代码检查工具 阿里巴巴Java开发代码检测IDE插件 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 任务进度 经过前期的学习和会议筹备,今天我们小组召开了代码评审会议.以下是今天 ...

  8. matrix derivatives

    来源:cs229 stanford Machine Learning Notes

  9. WCF和ASP.NET Web API在应用上的选择(转)

    出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4.5中 ...

  10. C#和C++语言使用方面的区别

    本人觉得C#是世界上最优美的语言,也可以说是一门傻瓜语言,入门成本低,上手快得到许多人的青睐,但是C#并没有在行业内得到大家的首肯,反倒是C/C++人才比较紧俏:本人在学习过程中将C#和C++语言使用 ...