首页 > 其他分享 >TZOJ 5788: 最优布线问题 最小生成树

TZOJ 5788: 最优布线问题 最小生成树

时间:2023-03-15 15:14:27浏览次数:36  
标签:结点 计算机 int sum 最小 布线 TZOJ 5788 连接

描述

 

 

学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。

当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。

现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。

 

 

 

输入

 

 

第一行为整数n(2≤n≤100),表示计算机的数目。此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。

 

 

输出

 

 

一个整数,表示最小的连接费用。

 

 

样例输入

 

3
0 1 2
1 0 1
2 1 0

样例输出

 2

提示

注:表示连接1和2,2和3,费用为2。

 

思路:最小生成树的特点是要求联通所有点的图的路径要是最小的,所以需要排序,我们将每一条边存进结构体,按权值从小到大排序,然后就可以按照并查集的找父节点find的方法来生成树

1.创建边的结构体,x,y,z分别代表x到y两点的权值为z,输入总共k条边

2.排序,按权值z从小到大

3.设定当前已连接结点sum=0,最小花费ans=0

4.设定1-n的结点父节点为自己f[i] = i

5.遍历k条边,寻找第i条边的结点的父节点fx,fy,如果fx!=fy,证明x和y是可以构成连接的

6.构成连接,让fy父节点设为fx,已连接结点数sum++,最小花费则是第i条边的权值

7.当已连接数sum==n时,最小生成树完成

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N = 10001;
 4 struct node{
 5     int x,y,z;//创建边的结构体,x,y,z分别代表x到y两点的权值为z
 6 }a[N];
 7 int f[N];
 8 bool cmp(node a,node b)
 9 {
10     return a.z<b.z;
11 }
12 int find(int x)
13 {
14     if(f[x]!=x)f[x] = find(f[x]);
15     return f[x];
16 }
17 int main()
18 {
19     
20     int n,k = 0;cin>>n;
21     for(int i=1;i<=n;i++)
22         for(int j=1;j<=n;j++)
23         {
24             cin>>a[++k].z;
25             a[k].x = i;a[k].y = j;
26         }
27     sort(a+1,a+1+k,cmp);//排序,按权值z从小到大
28     int sum = 0,ans = 0;//当前已连接结点sum=0,最小花费ans=0
29     for(int i=1;i<=n;i++)f[i] = i;
30     for(int i=1;i<=k;i++)
31     {
32         int fx = find(a[i].x);
33         int fy = find(a[i].y);
34         if(fx!=fy)//证明x和y是可以构成连接的
35         {
36             f[fy] = fx;//让fy父节点设为fx
37             sum++;//已连接结点数sum++
38             ans+=a[i].z;//最小花费ans则是第i条边的权值
39             if(sum==n)break;//当已连接数sum==n时,最小生成树完成
40         }
41     }
42     cout<<ans;
43      return 0;
44 }

 

标签:结点,计算机,int,sum,最小,布线,TZOJ,5788,连接
From: https://www.cnblogs.com/jyssh/p/17218577.html

相关文章

  • TZOJ 5784: 团伙 并查集
    描述 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足:1、我朋友的朋友是我的朋友;2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于......
  • TZOJ 3196: 看病要排队 优先队列
    描述看病要排队这个是地球人都知道的常识。不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻......
  • TZOJ 4767: 二叉树遍历
    描述  给定一颗二叉树,要求输出对二叉树进行先序和后序遍历所得到的序列。本题假设二叉树的结点数不超过1000。  输入  输入数据分为多组,第一行是测试数......
  • P5788 【模板】单调栈
    P5788【模板】单调栈【模板】单调栈题目背景模板题,无背景。2019.12.12更新数据,放宽时限,现在不再卡常了。题目描述给出项数为n的整数数列a_{1...n}。定义函数......
  • 6.8-中央处理器硬布线控制设计(1)
    基本原理将控制器看成生产固定时序控制信号的逻辑电路输入信号:指令译码,时钟信号,反馈信号作为输入输出信号:功能部件控制信号序列设计目标:最少原件,最快速度理论基础:布......
  • 6.9-硬布线控制器设计2
    变长指令周期:现代时序时钟周期数可变,速度快,设计复杂传统的三级时序系统里面,每一条指令都要对应八个时钟周期,也就是八个状态,执行指令的四个状态实际上为不同的指令共享,有......
  • 综合布线系统(结构化布线系统)详解
    综合布线七大子系统:进线间子系统设备间子系统管理间子系统垂直子系统水平子系统工作区子系统建筑群子系统1、进线间子系统进线间是建筑物外部通信和信息管线的入......
  • 布线系统
    以下内容主要摘自百度百科相关词条。基础概念布线系统:布线系统是构成以网络为基础的应用系统的重要组成部分。布线系统是网络的基础,一个好的布线系统不但可以充分发挥网......
  • TZOJ数据结构实验:树相同、左叶子和、倾斜度、直径、平衡二叉树、最小深度、层次构造二
    5429数据结构实验:树是否相同intisSameTree(structTreeNode*p,structTreeNode*q)//相同返回1,否则返回0{if(p==NULL&&q==NULL)return1;if(p==NULL||......
  • TZOJ数据结构实验:二叉树的层次构造、前中后序遍历、高度depth、叶子节点数leafs、交换
    5420数据结构实验--二叉树中序遍历(二叉链表存储)voidinorder(Bitnode*t)//中序{if(t->left)inorder(t->left);cout<<""<<t->val;if(t->right)inorde......