修建道路(最小生成树)

简介: 修建道路(最小生成树)

N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通。我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条路,并且C和B是连通的。

已知在一些村庄之间已经有了一些路,您的工作是再兴建一些路,使得所有的村庄都是连通的,并且兴建的路的长度是最小的。


输入格式:

第一行是一个整数N(3<=N<=100),代表村庄的数目。后面的N行,第i行包含N个整数,这N个整数中的第j个整数是第i个村庄和第j个村庄之间的距离,距离值在[1,1000]之间。

然后是一个整数Q(0<=Q<=N*(N+1)/2)。后面给出Q行,每行包含两个整数a和b(1<=a<b<=N),表示在村庄a和b之间已经兴建了路。


输出格式:

输出一行仅有一个整数,表示为使所有的村庄连通需要新建公路的长度的最小值。


输入样例:

1. 3
2. 0 990 692
3. 990 0 179
4. 692 179 0
5. 1
6. 1 2

结尾无空行


输出样例:

179


思路:把图转化为结构体存储,然后把已经存在的道路先添加进集合里面去,并把对应的边权置为零,然后排序把剩下的节点添加进去

#include<bits/stdc++.h>
using namespace std;
const int N=10100,inf=0x3f3f3f3f;
int g[N][N],p[N];
int find(int x)
{
    if(x!=p[x]) p[x]=find(p[x]);
    return p[x];
}
struct node{
    int x,y,w;
}s[N];
bool cmp(node a,node b)
{
    return a.w<b.w;
}
int main()
{
    int n,cnt=0,ans=0;
    cin>>n;
    for(int i=1;i<=n;i++) p[i]=i;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>g[i][j];
    int k;
    cin>>k;
    while(k--)
    {
        int a,b;
        cin>>a>>b;
        p[find(a)]=find(b);
        g[a][b]=g[b][a]=0;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(g[i][j])//转化为结构体
            {
                s[cnt].x=i;
                s[cnt].y=j;
                s[cnt].w=g[i][j];
                cnt++;
            }
        }
    }
    sort(s,s+cnt,cmp);
    for(int i=0;i<cnt;i++)
    {
        if(find(s[i].x)!=find(s[i].y)&&g[s[i].x][s[i].y])
        {
            p[find(s[i].x)]=s[i].y;
            ans+=s[i].w;
        }
    }
    cout<<ans;
    return 0;
}
目录
相关文章
|
SQL 存储 分布式计算
统一sql引擎Quicksql
统一sql引擎Quicksql
|
10月前
|
机器学习/深度学习 存储 人工智能
基于AI的实时监控系统:技术架构与挑战分析
AI视频监控系统利用计算机视觉和深度学习技术,实现实时分析与智能识别,显著提升高风险场所如监狱的安全性。系统架构包括数据采集、预处理、行为分析、实时决策及数据存储层,涵盖高分辨率视频传输、图像增强、目标检测、异常行为识别等关键技术。面对算法优化、实时性和系统集成等挑战,通过数据增强、边缘计算和模块化设计等方法解决。未来,AI技术的进步将进一步提高监控系统的智能化水平和应对复杂安全挑战的能力。
1802 4
|
运维 Devops
阿里云云效操作报错合集之代码域使用codeup进行本地代码迁移提示 repository does not exist,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
11月前
|
Java 开发者
Java“UnsupportedEncodingException”解决
在Java编程中,“UnsupportedEncodingException”是一个常见的异常,通常发生在处理字符编码时。本文将介绍该异常的原因、常见场景及解决方法,帮助开发者有效应对字符编码问题。
496 2
|
人工智能 安全 测试技术
从数字化转型到AI驱动的商业模式变革 领导者如何把握好未来的竞争力
从数字化转型到AI驱动的商业模式变革 领导者如何把握好未来的竞争力
|
Web App开发 JavaScript 前端开发
如何在浏览器中安装使用Vue开发者工具?Vue开发者工具的安装使用?可直接提取插件安装使用
这篇文章介绍了如何在浏览器中安装和使用Vue开发者工具,提供了两种下载方式,包括直接下载编译好的插件和从GitHub上下载源代码后进行打包。文章还详细说明了在Chrome浏览器中加载插件的步骤,以及插件在Vue项目和非Vue项目中的不同表现。
如何在浏览器中安装使用Vue开发者工具?Vue开发者工具的安装使用?可直接提取插件安装使用
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
17315 0
|
存储 NoSQL 算法
如何借助Redis更高效统计UV?——Hyperloglog篇
Redis的HyperLogLog数据类型是用于近似计算大规模数据集中不重复元素基数的工具,它以低空间开销(约12KB)提供高精度的估算(误差率约0.81%)。通过`pfadd`添加元素,`pfcount`统计数量,`pfmerge`合并多个HyperLogLog,实现去重计数。尽管内部存储为字符串,但它是概率数据结构,适合高效UV统计和其他大数据场景。
207 0
|
监控 Java API
Spring Boot与异步任务:整合与应用场景
【4月更文挑战第29天】异步任务在现代应用程序开发中扮演着重要的角色,它们可以提高应用程序的性能和响应速度,尤其适用于处理长时间运行的任务或需要等待外部资源的场景。Spring Boot提供了强大的支持来简化异步任务的实现。
234 0

热门文章

最新文章