• 题目链接:

    http://joyoi.org/problem/tyvj-1391

  • 思路:

    首先这需要一个推论:

    “给定一张无向图,若用\(k(k<n-1)\)条边构成一个生成森林(可以理解为多个互不相通的生成树),再从剩下的\(m-k\)条边中选出\(n-1-k\)条边构成改该图的最小生成树,则这\(m-k\)条边中一定包含连接两个不相连生成森林的最小边权的两点”

    这个推论是由这个定理得到:

    “一张无向图的最小生成树一定包含边权最小的那条边”,这个定理可以很容易地用反证法证得。

    那么我们就可以开始了,若连接两个不连通的生成森林最小边权为\(e\),根据推论,想要让它变成一张完全图而最小生成树保持不变,当然是让剩下的点相连边的权值为\(e+1\)。

    那么让这两个生成森林变成完全图则需要\((e+1)*(size[A]*size[B]-1)\),\(size[K]\)为以K为父节点的生成森林所含的点数,减去1是因为两个之中已经有一条边权为\(e\)的边

    根据贪心的思想,我们显然所有边从小到大排序,如果两顶点不在一个森林里,那么合并,加入贡献。

  • 代码(话说并查集路径压缩一开始写错了,查了好久的错,真是太蒻了):

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <queue>
#include <vector>
#define ll long long
#define ri register int
using namespace std;
const int maxn=6005;
const int inf=0xfffffff;
struct Edge{
int f,t,val;
bool operator <(const Edge &b)const{
return val<b.val;
}
}edge[maxn];
int n,t;
ll ans=0;
int size[maxn],fa[maxn];
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return ;
}
int get(int x){
if(fa[x]!=x)fa[x]=get(fa[x]);
return fa[x];//注意路径压缩写法
}
int main(){
int u,v,d;
read(t);
while(t--){
int ans=0;
memset(edge,0,sizeof(edge));
read(n);
for(ri i=1;i<n;i++)
read(edge[i].f),read(edge[i].t),read(edge[i].val);
sort(edge+1,edge+n);
for(ri i=1;i<=n;i++){fa[i]=i,size[i]=1;}
for(ri i=1;i<n;i++){
u=edge[i].f,v=edge[i].t,d=edge[i].val;
//cout<<u<<' '<<v<<endl;
u=get(u),v=get(v);
//cout<<u<<' '<<v<<endl;
if(u!=v){
fa[u]=v;
ans+=(d+1)*(size[u]*size[v]-1);
size[v]+=size[u];
}
}
printf("%d\n",ans);
}
return 0;
}

Joy OI【走廊泼水节】题解--最小生成树推论变式的更多相关文章

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

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

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

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

  3. tyvj 1391 走廊泼水节【最小生成树】By cellur925

    题目传送门 题意简化:给你一棵树,要求你加边使它成为完全图(任意两点间均有一边相连) ,满足原来的树是这个图的最小生成树.求加边的价值最小是多少. 考虑Kruskal的过程,我们每次找一条最短的,两边 ...

  4. AcWing 走廊泼水节 题解

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

  5. acwing346 走廊泼水节 (最小生成树)

    完全图就是每两个点都有直接相连的边. 模拟Kruskal算法的过程,每选择一条边加入时,他两端端点在同一个集合中就跳过,否则考虑合并两个集合,合并时需要增加的每条边的权值至少是edge[i]+1,这才 ...

  6. CH 6201 走廊泼水节题解

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

  7. SP338ROADS题解--最短路变式

    题目链接 https://www.luogu.org/problemnew/show/SP338 分析 联想到不久前做过的一道题\(Full\) \(Tank\),感觉可以用优先队列做,于是写了\(d ...

  8. 「CH6201」走廊泼水节

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

  9. 一道令人抓狂的零一背包变式 -- UVA 12563 Jin Ge Jin Qu hao

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

随机推荐

  1. CentOS 7下安装Redis

    1.安装gcc环境 sudo yum install gcc-c++ 2.安装wget sudo yum install wget 3.下载Redis源码包 wget http://download. ...

  2. django 2 ORM操作 ORM进阶 cookie和session 中间件

    ORM操作 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  3. centos上安装Python并修复yum

    date: 2019-07-01  18:09:53 author: headsen chen notice: 个人原创 1,安装python3.7: yum install zlib-devel b ...

  4. C# 多线程Thread.IsBackground=True的作用

    C#中多线程的线程加.IsBackground = true与不加有什么区别? 按照MSDN上讲:“获取或设置一个值,该值指示某个线程是否为后台线程.” 其实这个解释并不到位,至少应该解释一下后台线程 ...

  5. 手把手教你MyEclipseUML建模(下)

    手把手教你MyEclipseUML建模(下) 点击访问:手把手教你MyEclipseUML建模(上) 1.用UML 2建模 MyEclipse提供了以下UML 2特性: UML 2图:类.组件.部署. ...

  6. 机器学习 - 算法 - PCA 主成分分析

    PCA 主成分分析 原理概述 用途 - 降维中最常用的手段 目标 - 提取最有价值的信息( 基于方差 ) 问题 - 降维后的数据的意义 ? 所需数学基础概念 向量的表示 基变换 协方差矩阵 协方差 优 ...

  7. 【转】Selenium-WebDriverApi接口详解

    浏览器操作 # 刷新 driver.refresh() # 前进 driver.forward() # 后退 driver.back() 获取标签元素 # 通过ID定位目标元素 driver.find ...

  8. iOS-UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影

    iOS UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影 隐藏滚动条和上下滚动时出边界的后面的黑色的背景 webView.backgroundColor=[UIColor clearColor ...

  9. Spring jsp 下拉列表

    完整代码 <%-- Created by IntelliJ IDEA. User: wsh Date: 2019/7/21 Time: 11:35 To change this template ...

  10. iOS-AES算法总结

    AESCipher.h #import <Foundation/Foundation.h> @interface AESCipher : NSObject /** 加密算法 @param ...