一道另类生成树

原题链接

将输入的树的\(n-1\)条边按从小到大排序,然后\(Kruskal\)在生成该树的过程中计算新增边的总长。

当在连第\(i\)条边,设该边的两端点为\(x,y\),长度为\(z\),分别属于\(S_x\)和\(S_y\)两个并查集中。

而为了将树变成完全图,显然要将\(S_x,S_y\)两个并查集中所有点一一连边,所以除去原有的这条边,剩下共\(|S_x|\times|S_y|-1\)条边需要被添加。

而为了使完全图的最小生成树是原有树,所以在添加这\(|S_x|\times|S_y|-1\)条边时,必须使得这些边比原有边要长,同时由于要使得添加的边长和最小,所以这些边的长度均为\(z+1\)。

所以总长为\((z+1)\times(|S_x|\times|S_y|-1)\),将其累加至答案即可。

#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 6010;
struct dd {
int x, y, z;
};
dd a[N];
int fa[N], S[N];
int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c<'0' || c>'9'; c = getchar())
p |= c == '-';
for (; c >= '0'&&c <= '9'; c = getchar())
x = x * 10 + (c - '0');
return p ? -x : x;
}
int fin(int x)
{
if (fa[x] == x)
return x;
return fa[x] = fin(fa[x]);
}
int comp(dd x, dd y)
{
return x.z < y.z;
}
int main()
{
int i, x, y, n, t;
long long s;
t = re();
while (t--)
{
n = re();
for (S[n] = i = 1, fa[n] = n; i < n; i++)
{
a[i].x = re();
a[i].y = re();
a[i].z = re();
fa[i] = i;
S[i] = 1;
}
sort(a + 1, a + n, comp);
for (i = 1, s = 0; i < n; i++)
{
x = fin(a[i].x);
y = fin(a[i].y);
if (x != y)
{
s += 1LL * (a[i].z + 1)*(S[x] * S[y] - 1);
fa[x] = y;
S[y] += S[x];
}
}
printf("%lld\n", s);
}
return 0;
}

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

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

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

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

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

  3. 「CH6201」走廊泼水节

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

  4. P1391 走廊泼水节

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

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

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

  6. CH 6021 走廊泼水节

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

  7. [TYVJ1391]走廊泼水节

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

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

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

  9. CH 6201 走廊泼水节题解

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

随机推荐

  1. VMwear安装Centos7超详细过程

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...

  2. ActiveX 控件

    一.ActiveX基础 1.1什么是ActiveX ActiveX是COM规范的一种实现,前身是OLE(Object Linking and Embedding).一般读成:ActiveX Ctron ...

  3. linux 内核启动流程

    Linux内核启动流程详细分析: http://www.linuxidc.com/Linux/2014-10/108034.htm ARM Linux内核启动过程: http://blog.csdn. ...

  4. openstack 资料

    调用流程 https://blog.csdn.net/bill_xiang_/article/details/72909927

  5. vue set

    Vue 可以通过数组变异的方法可以控制数组的增减,却不能更改数组及对象,vue可以通过set方法改变数组的长度,改变某项的值,在组件中可以使用$set方法改变数组长度和某项的值 调用方法:Vue.se ...

  6. powerdessigner使用教程

    https://jingyan.baidu.com/article/86fae346e089393c49121a11.html

  7. 修改 Tomcat Connector运行模式 优化Tomcat运行性能

    omcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一.不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行 ...

  8. React中innerHTML的坑

    [React中innerHTML的坑] 通过React Ref机制返回的对象,是一个阉割的DOM对象,并非原始DOM对象.比如,这个阉割版的DOM对象没有innerHTML对象. <button ...

  9. 修改mysql 数据库编码

    查看编码 SHOW VARIABLES LIKE 'character_set_%'; 依次修改like出来的字段 例如  set character_set_results=utf8; 完了修改/e ...

  10. 第三章 列表(d)选择排序