洛谷 P2820 局域网
题目链接
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 局域网的更多相关文章
- 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...
- 洛谷——P2820 局域网
P2820 局域网 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成 ...
- 洛谷P2820 局域网 (最小生成树)
题目链接:https://www.luogu.org/problemnew/show/P2820 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内 ...
- 洛谷 P2820 局域网x
题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象.因为连 ...
- 洛谷P2820 局域网
#include<bits/stdc++.h> using namespace std; ; ; int n,k,sum,tot; struct node{ int cnt,fa; }f[ ...
- 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题
链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
随机推荐
- git 学习(4) ----- git rebase
使用git rebase 的前提是多人协作下的分支开发,如果是单人开发,那就没有必要使用它了,这是由git rebase 的作用所决定的,git rebase 有两大作用:一个是与主分支保持同步,一个 ...
- JDK源代码学习-基础类
一.概述 1.Java,是一套语言规范,例如规定了变量如何定义.控制语句如何写等,提供基本的语法规范.JDK是java自带的一套调用组件,是对基本java语法规范的进一步封装,jdk中都是使用java ...
- logback日志模板
logback.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> & ...
- sqlserver建立远程查询
开始远程查询前: ----open:Ad Hoc Distributed QueriesEXEC sp_configure 'show advanced options',1reconfigureex ...
- Gradle里面两个 依赖管理插件,可以不用关心 具体jar版本号
引用:https://spring.io/blog/2015/02/23/better-dependency-management-for-gradle Using the plugin with S ...
- 04--STL序列容器(Stack和Queue)
总括: stack和queue不支持迭代 一:栈Stack (一)栈的简介 stack是堆栈容器,是一种“先进后出”的容器. stack是简单地装饰deque容器而成为另外的一种容器. (二)栈的默认 ...
- 深入理解Java设计模式之观察者模式
前言 观察者,即时observer,总结来说就是一个当一个被观察的对象的状态发生变化时,会通知相应的观察者对象. 观察者模式定义了四种角色:抽象主题.具体主题.抽象观察者.具体观察者 1.抽象主题 ...
- docker自定制镜像
概述 很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件 ...
- java基础 关于final修饰符
final作为一个修饰符,可以修饰类.变量.函数. 1.被final修饰的类不可以被继承(保护封装性),为了避免被继承,被子类复写: 2.被final修饰的函数不可以被复写 3.被final修饰的变量 ...
- XGBboost 特征评分的计算原理
xgboost是基于GBDT原理进行改进的算法,效率高,并且可以进行并行化运算,而且可以在训练的过程中给出各个特征的评分,从而表明每个特征对模型训练的重要性, 调用的源码就不准备详述,本文主要侧重的是 ...