0
点赞
收藏
分享

微信扫一扫

C++ 局域网

at小涛 2022-04-01 阅读 70

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

因为连接计算机的网线本身不同,所以有一些连线不是很畅通,我们用f(i,j)表示i,j之间连接的畅通程度(f(i,j)<=1000),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)的最大值

样例数据

input

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

8
数据规模与约定
1≤n≤100

CODE

#include<bits/stdc++.h>
using namespace std;
int d[105],e[105][105],n,m;
bool u[105];
int prim(int cur)
{
	int i,j;
	int sum=0;
	int index=cur;
	memset(u,false,sizeof(u));
	u[cur]=true;
	for(i=1;i<=n;i++)
	{
		d[i]=e[cur][i];
	}
	for(j=1;j<n;j++)
	{
		int minn=10000;
		for(i=1;i<=n;i++)
    	{
    		if(!u[i] && d[i]<minn)
    		{
    			minn=d[i];
    			index=i;
    		}
        }
        u[index]=true;
        sum+=minn;
        for(i=1;i<=n;i++)
        {
		    if(!u[i] && d[i]>e[index][i])
		    {
		    	d[i]=e[index][i];
			}
		}
	}
	return sum;
} 
int main()
{
	int i,j,r=0;
	cin>>n>>m;
	memset(e,10000,sizeof(e));
	for(i=1;i<=m;i++)
	{
		int a,b,w;
		cin>>a>>b>>w;
		r+=w;
		e[a][b]=w;
		e[b][a]=w;
	}
	int t=prim(1);
	cout<<r-t;
	return 0;
}

在这里插入图片描述

天天赞天天看,明天再见,拜拜!

举报

相关推荐

局域网

无线局域网

虚拟局域网

Vlan虚拟局域网

Nginx 局域网共享

小白局域网搭建

虚拟局域网VLAN

0 条评论