题目链接:CH6201

当时在海亮考试的第一题;

心得:其实一个算法是要真正理解这个思路和过程,而并不是单单知道它是用来写什么题的;

思路:n个节点有n-1条边,把这n-1条边按照权值从小到大排序,有点类似Kruskal算法的过程;

设当前扫描到边(x,y,z)时,若x,y不在同一个集合,此时应该合并Sx,Sy,此时,对于x所在集合中除x之外的点u,y所在集合中除y之外的点v,完全图中u与v之间肯定要连一条边,所以共同构成一个环,因为要保证边(x,y)一定在最小生成树中,就必须让(x,y)是连接两个集合的边权最小的边。设x,y之间权值为z,所以(u,v)的边权最小为z+1。而Sx与Sy之间最后一共会增加(size[x]*size[y]-1)条边,所以把(z+1)*(size[x]*size[y]-1)累加到答案中;

算法时间复杂度O(NlogN);

#include<bits/stdc++.h>
using namespace std;
#define N 500001
template<typename T>inline void read(T &x)
{
x=;T f=,ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
x*=f;
}
struct gg
{
int x,y,v;
}a[N<<];
int father[N],size[N],t,n;
bool cmp(gg x,gg y){return x.v<y.v;}
inline int find(int x){return father[x]==x?x:father[x]=find(father[x]);}
int main() {
read(t);
while(t--) {
read(n);
for(int i=;i<=n;i++) father[i]=i,size[i]=;
for(int i=;i<n;i++)
read(a[i].x),read(a[i].y),read(a[i].v);
sort(a,a+n,cmp);
long long ans=;
for(int i=;i<n;i++) {
int p=find(a[i].x),q=find(a[i].y);
if(p==q) continue;
ans+=(long long)(a[i].v+)*(size[p]*size[q]-);
father[p]=q;
size[q]+=size[p];
}
printf("%lld\n",ans);
}
return ;
}

CH 6201 走廊泼水节题解的更多相关文章

  1. CH 6021 走廊泼水节

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

  2. contesthunter 6201 走廊泼水节【克鲁斯卡尔+并查集】

    很有意思的题,所以还是截lyddalao的课件 #include<iostream> #include<cstdio> #include<algorithm> us ...

  3. AcWing 走廊泼水节 题解

    这道题大致题意就是让一棵树任意两点有连边(也就是完全图),但是补完后最小生成树是一开始的那棵树,问最小加的边权之和是多少. 了解题意后,我们可以想到用Kruskal(废话),当每两个集合合并的时候,除 ...

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

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

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

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

  6. 「CH6201」走廊泼水节

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

  7. Joy OI【走廊泼水节】题解--最小生成树推论变式

    题目链接: http://joyoi.org/problem/tyvj-1391 思路: 首先这需要一个推论: "给定一张无向图,若用\(k(k<n-1)\)条边构成一个生成森林(可以 ...

  8. [TYVJ1391]走廊泼水节

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

  9. P1391 走廊泼水节

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

随机推荐

  1. docker上部署rabbitmq

    1.docker search rabbitmq 2.docker pull rabbitmq:3.6 3.docker run -d -p 5672:5672 -p 15672:15672 --na ...

  2. YOLO V3 错误总结

    问题1 TypeError: function takes exactly 1 argument (3 given) 报错说PIL库中的函数只接收到一个参数,应该给三个,自己在这里记录下解决方法,出错 ...

  3. VS2017 SVN插件-AnkhSVN

    AnkhSVN 该插件可以直接在vs017扩展和工具里安装,安装完成即可使用 默认VS自带的源码管理工具是GIT 如果已经使用需要手动切换到SVN:工具==>选项菜单中设置 SVN使用方法: 1 ...

  4. sourceTree如何不用注册就使用

    下载好之后会有这么一个界面要求你注册或登录.(不管它)将下面的一串串放进我的电脑的地址栏,打开sourcetree的文件夹 %LocalAppData%\Atlassian\SourceTree\ 注 ...

  5. 获取本机IP地址的方法

    public class Test { public static void main(String[] strings) { try { InetAddress candidateAddress = ...

  6. Zookeeper节点增删改查与集群搭建(笔记)

    1.上传文件目录说明 上传的文件一般放在 /home/下 安装文件一般在 /usr/local/下 2. 安装zookeeper 2.1将zookeeper-3.4.11.tar.gz拷贝到/home ...

  7. Java面试题和解答(一)

    1.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? JVM原理 :http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.html 内存 ...

  8. pdf下载速度

  9. selenium--控制浏览器和简单元素操作

    控制浏览器1.driver.maximize_window() #浏览器最大化2.driver.set_windows_size(480*800) #浏览器设置成移动端大小(480*800),参数数字 ...

  10. Json数据产生树形结构

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...