JoyOI1391 走廊泼水节
一道另类生成树
原题链接
将输入的树的\(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 走廊泼水节的更多相关文章
- CH6201 走廊泼水节【最小生成树】
6201 走廊泼水节 0x60「图论」例题 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我 ...
- [Tvvj1391]走廊泼水节(最小生成树)
[Tvvj1391]走廊泼水节 Description 给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 完全图:完 ...
- 「CH6201」走廊泼水节
「CH6201」走廊泼水节 传送门 考虑 \(\text{Kruskal}\) 的过程以及用到一个最小生成树的性质即可. 在联通两个联通块时,我们肯定会选择最小的一条边来连接这两个联通块,那么这两个联 ...
- P1391 走廊泼水节
时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老 ...
- 奇葩最小生成树--->走廊泼水节(tyvj1391)
题目描述 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老江湖了,当然很快就发现了我们的小阴谋,于是他准备好水枪迫不及待的想要加入我们了. ...
- CH 6021 走廊泼水节
描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我们一共有N个OIER打算参加这个泼水节,同时 ...
- [TYVJ1391]走廊泼水节
Description 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老江湖了,当然很快就发现了我们的小阴谋,于是他准备好水枪迫不及待的想要 ...
- CH6201 走廊泼水节[最小生成树]
描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我们一共有N个OIER打算参加这个泼水节,同时 ...
- CH 6201 走廊泼水节题解
题目链接:CH6201 当时在海亮考试的第一题: 心得:其实一个算法是要真正理解这个思路和过程,而并不是单单知道它是用来写什么题的: 思路:n个节点有n-1条边,把这n-1条边按照权值从小到大排序,有 ...
随机推荐
- float double 如何存储
类型float大小为4字节,即32位,内存中的存储方式如下: 符号位(1 bit) 指数(8 bit) 尾数(23 bit) 类型double大小为8字节,即64位,内存布局如下: 符号位(1 ...
- C++字符串和向量
陷阱:C字符串使用=和== char a_string[10]; a_string="Hello" 非法 strcpy(a_string,"Hello"); ...
- vue iview tree checked改变 不渲染的问题
子级的状态 改为checked=false 需要把父的状态改为 false
- 给tbody加垂直滚动条的具体思路
[给tbody加垂直滚动条的具体思路] 给tbody加垂直滚动条的思路就是把tbody设置成display:block,然后就对其高度设置一个固定值,overflow设置成auto即可 参考:http ...
- python-ceilometerclient命令行(1)
1.导入模块,可以动态获取模块中方法并调用,其功能与from...import...一致 2. callback = getattr(actions_module, attr) 从模块中获取方法. 调 ...
- JMeter学习(三十三)测试报告优化(转载)
转载自 http://www.cnblogs.com/yangxia-test 如果按JMeter默认设置,生成报告如下: 从上图可以看出,结果信息比较简单,对于运行成功的case,还可以将就用着.但 ...
- Linux 永久PATH环境变量
在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用vim在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”. 例如:编辑/etc ...
- 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)
枚举 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象.这种实例有限而且固定的类,在Java里被称为枚举类. 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编 ...
- Django之crm
crm注册 crm注册Form from django import forms from crm import models from django.core.exceptions import V ...
- [Unity3D]降低向Shader中传值的开销
Unity3D中提供了很多API用于向shader传值,这篇文章对比测试了两类不同的使用方法的性能. 正文 Unity3D中,通过C#代码向shader传值有两种方式. 一种是面向具体的materia ...