首页 > 其他分享 >数据结构课程设计2023夏7-3 修建道路

数据结构课程设计2023夏7-3 修建道路

时间:2023-06-19 16:44:30浏览次数:43  
标签:课程设计 include cnt int 连通 村庄 179 2023 数据结构

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之间已经兴建了路。

输出格式:

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

输入样例:

3
0 990 692
990 0 179
692 179 0
1
1 2
 

输出样例:

179
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010,M=200010;
int fa[N],n;
struct edges{
    int u,v,d;
}e[M];
int cnt;
bool cmp(edges a,edges b){
    return a.d<b.d;
}
int find(int x){
    return fa[x]==x?fa[x]:fa[x]=find(fa[x]);
}
ll dijkstra(int m){
    ll res=0;
    int k=0;
    for(int i=0;i<cnt;i++){
        int u=e[i].u,v=e[i].v,d=e[i].d;
        int fu=find(u),fv=find(v);
        if(fu!=fv){
            res+=d;
            fa[fu]=fv;
            k++;
        }
    }
    
    return k==n-1-m?res:0x3f3f3f3f;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        fa[i]=i;
    }
    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            int x;
            cin>>x;
            if(i>j){
                e[cnt++]={i,j,x};
            }
        }
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++){
        int u,v;
        cin>>u>>v;
        int fu=find(u),fv=find(v);
        if(fu!=fv){
            fa[fu]=fv;
        }
    }
    
    sort(e,e+cnt,cmp);
    ll res=dijkstra(m);
    if(res!=0x3f3f3f3f){
        cout<<res<<endl;
    }
    else{
        cout<<"impossible"<<endl;
    }
    return 0;
}

  

标签:课程设计,include,cnt,int,连通,村庄,179,2023,数据结构
From: https://www.cnblogs.com/kk4458/p/17491512.html

相关文章

  • 数据结构课程设计2023夏7-11 二路归并排序
    给定一个整数序列,请按非递减序输出采用二路归并排序(递归法)的各趟排序后的结果(每完成一次归并操作就输出归并后的结果)。输入格式:测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。输出格式:对于每组测试,输出若干行,每行是一趟排序后的......
  • CVE-2023-33246命令执行复现分析
    RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。影响版本<=RocketMQ5.1.0<=RocketMQ4.9.5环境搭建dockerpullapache/rocketmq:4.......
  • 数据库管理软件-DataGrip 2023 mac/win版
    DataGrip2023是由JetBrains开发的一款全功能数据库管理工具。它旨在提供一个集成的开发环境,方便开发人员管理和操作各种类型的数据库。DataGrip2023支持多种数据库系统,包括MySQL、PostgreSQL、Oracle、SQLServer等。它具有直观的用户界面,使用户能够轻松地连接到数据库服务器,并......
  • 大数据,信息与智能工程国际会议(BDIIE2023)
    2023年大数据、信息与智能工程国际会议(BDIIE2023)将于2023年9月17-18日在中国武汉举行。BDIIE2023 将以高质量的技术和体验计划为特色,在论文展示和备受瞩目的主题演讲中处理传统和当代的热门话题。我们诚邀您提交与大数据、信息工程和智能工程相关的所有主题的论文和摘要,期待您......
  • 【Android面试】2023最新面试专题一:HashMap篇
    1、请说一说HashMap,SparseArrary原理,SparseArrary相比HashMap的优点、ConcurrentHashMap如何实现线程安全?这道题想考察什么?1、HashMap,SparseArrary基础原理?2、SparseArrary相比HashMap的优点是什么?3、ConcurrentHashMap如何实现线程安全?考察的知识点HashMap,SparseArrary、Concurre......
  • 2023年Flutter开发前景如何,能找到工作吗?
    引言Flutter自诞生之日起,从来都稳坐风口浪尖,关注与争议一直伴随其身。学习一门技术的时候大家最关心的就是发展前景怎么样,学习Flutter的朋友也不例外,那就让我们一起来看看2023年Flutter开发前景到底怎么样吧。Flutter开发前景从上图的数据可以看出,虽然Flutter开发岗位的招聘在减......
  • 2023-06-19 API `getMenuButtonBoundingClientRect` is not yet implemented
    前言:想使用该Api来获取设备导航栏高度,结果报错了:API`getMenuButtonBoundingClientRect`isnotyetimplemented尚未实现API`getMenuButtonBoundingClientRect`原因:该Api不支持在app端或者h5端使用。平台兼容如下: AppH5微信小程序支付宝小程序百度小程序抖音小程序飞书小......
  • 2023跳槽涨薪必看,Android面试经验分享,附经典题库+答案解析
    过完年就是金三银四,跳槽旺季了,如今疫情管控放开,就业形势或会有所回暖,也会有更多的Android开发岗位逐渐释出。近期,也有很多同学问我关于Android技术岗位招聘的事,希望能提前准备一下,好冲击大厂、拿到高薪。博主作为首批Android开发者,十余年深耕Android及移动互联网开发领域,有丰富的面......
  • 2023-06-19《计算方法》- 陈丽娟 - 方程的近似解法(注解)
    2023-06-19《计算方法》-陈丽娟-方程的近似解法(注解)Matlab计算方法二分法迭代法牛顿法前面介绍了求解方程的二分法、迭代法和牛顿迭代法,这里介绍弦截法,欸特金加速法。一、弦截法由于牛顿迭代法需要计算导数,而从上一章节我们看到导数的求解对数值稳定性会产生不良影响,为了......
  • 算法与数据结构Day03——平衡二叉树的根
    #include<stdio.h>#include<stdlib.h>typedefstructnode*AVLTree;structnode{intData;AVLTreeLeft;AVLTreeRight;};intHigh(AVLTreeT){if(!T)return0;intleft=High(T->Left)+1;intright=High(T->......