首页 > 其他分享 >6529: 构造完全图 最小生成树

6529: 构造完全图 最小生成树

时间:2023-08-11 19:22:51浏览次数:34  
标签:node int sum 最小 生成 6529 节点 边权

描述

 

对于完全图G,若有且仅有一棵最小生成树为T,则称完全图G是树T的扩展出的。给你一 棵树T,找出T能扩展出的边权和最小的完全图G。

 

输入

 

第一行N表示树T的点数。 接下来N-1行:Si,Ti,Di;描述一条边(Si,Ti)权值为 Di。 保证输入数据构成一棵树。

对于20%的数据,N<=10 对于50%的数据,N<=1000 对于100%的数据,N<=100000,1<=Di<=100000

 

输出

 

 

一个数,表示最小的图G的边权和。

 

 

样例输入

 

4
1 2 1
1 3 1
1 4 2

样例输出

12

这道题解法很巧妙,还是从小到大排序,一条一条往上加。
往上加的同时,记录sum[i]表示以i为根节点的树中含点的个数,很显然,一次操作中所加的边权就是(sum[i]+sum[j]-1)*(v+1)+v其中i表示加入边的起点,j表示终点,v表示边权

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10,inf = 0x3f3f3f3f;
struct node{
    int x,y,t;
};
node a[N];
int n,f[N],sum[N];//f[i]i的父节点,sum[i]以i为父节点的家族人数 
bool cmp(node a,node b)
{
    return a.t<b.t;
}
int find(int x)
{
    if(f[x]!=x)f[x] = find(f[x]);
    return f[x];
}
int main()
{

    cin >> n;
    for(int i=1;i<=n-1;i++)
    {
        scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].t);
    }
    sort(a+1,a+n,cmp);
    for(int i=1;i<=n;i++)
    {
        f[i] = i;sum[i] = 1;
    }
    ll ans = 0;
    for(int i=1;i<=n-1;i++)
    {
        int fx = find(a[i].x);
        int fy = find(a[i].y);
        if(fx!=fy)
        {
            f[fy] = fx;
            ans += ll((ll)sum[fx]*sum[fy]-1)*(a[i].t+1)+a[i].t; //完全图公式 
            sum[fx]+=sum[fy];
        }
    }
    cout << ans;
     return 0;
}

 

标签:node,int,sum,最小,生成,6529,节点,边权
From: https://www.cnblogs.com/jyssh/p/17623790.html

相关文章

  • C++欧几里得算法求最大公约数和最小公倍数
    定义最大公约数即为GreatestCommonDivisor,常缩写为gcd。一组整数的公约数,是指同时是这组数中每一个数的约数的数。一组整数的最大公约数,是指所有公约数里面最大的一个。那么如何求最大公约数呢?我们先考虑两个数的情况。欧几里得算法过程如果我们已知两个数\(a\)和\(......
  • 开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2等模型,开
    开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2等模型,开箱即用1.介绍TextGen实现了多种文本生成模型,包括:LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用。1.1最新更新[2023/06/15]v1.0.0版本:新增ChatGLM/LLaMA/Bloom模......
  • 代码生成以及数据生成
    我们在正常开发中设计到数据库的设计,以及对应实体类的代码。我现在讲解两个知识点。代码先行以及数据库先行1、代码先行就是你在程序中创建一个类库,专门用来管理你的实体类实体类写完后,利用ORM框架,譬如EF或者SqlSugar自带的性质可以直接生成数据库,以及数据表而代码实体类创......
  • 关于dev c++显示中文不显示,乱码和生成的可执行文件中文乱码
    1.不显示中文工具----编译器选项----显示-----去掉底下的复选框(第一个consolas下面)2,运行窗口中文乱码方法:1、工具—编译选项2、在第一个框中填入-fexec-charset=gbk3、勾选“编译器加入以下命令”4、重新编译一次以后运行。  ......
  • 小程序生成App:可跨平台开发的移动应用开发框架
    小程序生成App可以成为一种轻量低门槛的开发App的方式,但是需要根据具体情况进行选择。如果应用需要处理大量数据或需要进行复杂计算,或者需要实现原生特有的功能或交互效果,可能需要选择其他开发方式。在文章开始之前,我们看看目前市面上比较容易上手、低门槛开发App的框架和方式Rea......
  • 考研数据结构——每日一题[最小生成树Kruskal]
    Kruskal算法O(mlogm)贪心按边权从小到大加入边,并查集判断点是否在集合中,不在的加入并查集#include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=510 , M=100010;intn,m;structEdge{ inta,b,c;//a->b:value=c bo......
  • 写测试用例、重构函数、生成SQL查询……原来CodeGeeX还能做这些!
    CodeGeeX中的智能问答功能“AskCodeGeeX”可以帮助程序员解答开发过程中遇到的问题。但是“AskCodeGeeX”的能力不止于此,用它还能帮助程序员高效编写测试用例,添加代码调试信息,实现SQL语句等等。如果你还不知道如何实现,下面我们一起来看几个例子,看看程序员拥有一个超级编程助手,......
  • 合成数据平台:释放结构化数据的生成式 AI 的力量
    推荐:使用NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景创建机器学习或深度学习模型非常简单。如今,有不同的工具和平台不仅可以自动化创建模型的整个过程,甚至可以帮助您为特定数据集选择最佳模型。通过创建模型解决问题所需的基本内容之一是包含描述您尝试解决的问题的所有......
  • 小程序生成App:轻量低门槛的开发方式
    小程序生成App可以成为一种轻量低门槛的开发App的方式,但是需要根据具体情况进行选择。如果应用需要处理大量数据或需要进行复杂计算,或者需要实现原生特有的功能或交互效果,可能需要选择其他开发方式。在文章开始之前,我们看看目前市面上比较容易上手、低门槛开发App的框架和方式......
  • 题解 LuoguP3306 [SDOI2013] 随机数生成器
    题目链接:【LuoguP3306】。前置知识OI-Wiki:快速幂,扩展欧几里得算法(exgcd),BabyStep,GiantStep算法。题意很清楚,不说。分析当\(t=x\)时答案很明显为\(1\),即在第一天就可以读到。当\(t\neqx\)时当\(a=0\)时观察一下规律:\[x_1\equivx_1\pmod{p}\]\[x_2\equivb......