题目链接

https://www.luogu.org/problemnew/show/P2820

题目背景

某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象。因为连接计算机的网线本身不同,所以有一些连线不是很畅通,我们用f(i,j)表示i,j之间连接的畅通程度,f(i,j)值越小表示i,j之间连接越通畅,f(i,j)为0表示i,j之间无网线连接。

题目描述

需要解决回路问题,我们将除去一些连线,使得网络中没有回路,并且被除去网线的Σf(i,j)最大,请求出这个最大值。

输入输出格式

输入格式:

第一行两个正整数n k

接下来的k行每行三个正整数i j m表示i,j两台计算机之间有网线联通,通畅程度为m。

输出格式:

一个正整数,Σf(i,j)的最大值

输入输出样例

输入样例:

5 5
1 2 8
1 3 1
1 5 3
2 4 5
3 4 2

输出样例:

8

说明

f(i,j)<=1000

解题思路

首先,我们需要了解一下有关最小生成树的知识。

名词解释:

  • 最小生成树:对于带权图,权值和最小的生成树

  • 最小瓶颈生成树:对于带权图,最大权值最小的生成树

  • 最小生成树一定是最小瓶颈生成树

蒟蒻不理解,换一种解释:

  • 生成树:在一幅图中将所有n个点连接起来的n-1条边所形成的树

  • 最小生成树:边权之和最小的生成树

算法:

  Prim算法或者Kruskal算法。但是一般都会使用Kruskal算法,因为它实用性更强,更加灵活,而且不用建图。

  但是在这里我们介绍prim算法

prim算法:

  prim算法的思想和dijstra很像——都是红白点思想。初始状态下,除第一个点(可以是任意一个点)为红点外,所有的点都是白点,每一次循环找出距离这个红点最近的白点,把它变成红点,然后再用这个点去更新其他的白点。就像这样,知道所有的点都变成红点。

这个题就是求被除去的长度最大,就是剩下的总长度最小,剩下的总长度就是最小生成树的边权和,被除去的总长度=原来总长度-最小生成树的边权和。

其中对memset不懂的推荐我的另一篇博客:https://www.cnblogs.com/yinyuqin/p/10162716.html

具体实现请见代码:

 #include<iostream>
#include<cstring> //memset的头文件
using namespace std;
int m[][],n,k,cnt1,cnt2; //m用来存图(邻接矩阵存图)
int a[]; //a[i]存的是每个点到最小生成树的最短距离
int ok[]; //ok[i]存的是i这个点是否已经在最小生成树上
int main(){
cin>>n>>k;
for(int i=;i<=k;i++){
int a,b,c;
cin>>a>>b>>c;
m[a][b]=m[b][a]=c; //这个一个无向图。
cnt1+=c; //存原图的边权和
}
memset(a,0x7f,sizeof(a)); //先把每个点到最小生成树的距离设置为无穷大。
a[]=; //将点1加入最小生成树,点1到最小生成树的距离设置为0。
for(int j=;j<=n;j++){ //要保证每一个点都在最小生成树里面,就需要循环n次。
int minn=;
for(int i=;i<=n;i++){ //找到距离最小生成树最小的白点
if(!ok[i]&&((a[i]<a[minn])||minn==)) minn=i;
}
ok[minn]=; //将白点变为红点,加入最小生成树
for(int i=;i<=n;i++){ //更新与这个点相邻的其他白点距最小生成树的距离
if(m[minn][i]&&!ok[i]) a[i]=min(m[minn][i],a[i]);//取最小值
}
}
for(int i=;i<=n;i++) cnt2+=a[i]; //统计最小生成树的边权和
cout<<cnt1-cnt2; //相减即为答案
return ;
}

AC代码

洛谷 P2820 局域网的更多相关文章

  1. 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网

    嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...

  2. 洛谷——P2820 局域网

    P2820 局域网 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成 ...

  3. 洛谷P2820 局域网 (最小生成树)

    题目链接:https://www.luogu.org/problemnew/show/P2820 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内 ...

  4. 洛谷 P2820 局域网x

    题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象.因为连 ...

  5. 洛谷P2820 局域网

    #include<bits/stdc++.h> using namespace std; ; ; int n,k,sum,tot; struct node{ int cnt,fa; }f[ ...

  6. 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题

    链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...

  7. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  8. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  9. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

随机推荐

  1. tensorflow-TFRecord报错ValueError: Protocol message Feature has no "feature" field.

    编写代码用TFRecord数据结构存储数据集信息是报错:ValueError: Protocol message Feature has no "feature" field.或和 ...

  2. Git源码管理工具使用

    注明:双击tap键为自动补全操作 1.视频地址:http://www.newbieol.com/course/index_102.html 2.sourcetree是一个拥有界面的git工具吧 下载官 ...

  3. luogu P1723 高手过愚人节

    打算下周讲课就讲Manacher了 所以百度了一下相关题目,发现了一道千古好题 这道题没想到是一道模板题,模板中的模板 简要说一下思路,我们先复制一遍模板(甚至变量都不用改 然后唯一的区别就是要求的是 ...

  4. 在centos安装MySql的三种安装方法

    一.二进制安装MySql 1. 下载Mysql安装包 wget https://downloads.mysql.com/archives/get/file/mysql-5.6.40-linux-gli ...

  5. 上板子在线抓波发现app_rdy一直为低

    现象 使用Xilinx的MIG IP测试外挂DDR3的读写发现一段很短的时间后app_rdy恒为低,并且最后一个读出的数据全是F. (1)不读写数据,app_rdy正常为高,MIG IP初始化信号为高 ...

  6. kubernetes 1.14安装部署metrics-server插件

    简单介绍: 如果使用kubernetes的自动扩容功能的话,那首先得有一个插件,然后该插件将收集到的信息(cpu.memory..)与自动扩容的设置的值进行比对,自动调整pod数量.关于该插件,在ku ...

  7. 使用BeautifulSoup

    下载bs4,导入BeautifulSoup pip install bs4 from bs4 import BeautifulSoup BeautifulSoup 的使用 创建对象 r = reque ...

  8. Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

  9. Ps 应用小技巧总结

    一.如何等比例放大图片? 使用形状工具,画图之后,保存为智能对象,但是 ctrl+T 之后放大,会有虚边: 解决办法:编辑智能对象,在新的画布中:图像---图像大小----ctrl+alt+I 此处进 ...

  10. neufz

    ~~~~1--1--5--2020/4/23 08:50:30|1--1--5--2020/4/23 08:50:30|1--1--5--2020/4/23 08:50:30|1--1--5--202 ...