局域网

Posted kanchuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了局域网相关的知识,希望对你有一定的参考价值。

题目背景

某个局域网内有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)的最大值

 

输入输出样例

输入样例#1: 
5 5
1 2 8
1 3 1
1 5 3
2 4 5
3 4 2
输出样例#1: 
8

说明

f(i,j)<=1000

 

分析:

这道题我觉得还是有点难度的。。。至少比团伙难吧。。。但是莫名恶意评分QAQ。。。还有本题显然是最小生成树吧。。。为什么是并查集???

 

CODE:

 

#include<cstdio>
#include<iostream>
#include<algorithm> 
using namespace std;    
int n,m,a,b,c,tot=0,v[10001],fa[10001],k[10001],num=0;
struct edge

    int from,to,next,data;
e[10001];
bool cmp(const edge &a,const edge &b)
    if(a.data<b.data)return 1;
    else return 0;

void add(int x,int y)
    tot++;
    e[tot].from=x;
    e[tot].to=y;
    e[tot].data=c;
    e[tot].next=v[x];
    v[x]=tot;

int find(int x)
    if(fa[x]!=x)return fa[x]=find(fa[x]);
    return x;

void uni(int x,int y)
    int r1=find(x),r2=find(y);
    if(r1!=r2)fa[r2]=r1;

int main()
    cin>>n>>m;
    for(int i=1;i<=m;i++)
        cin>>a>>b>>c;
        num+=c;
        add(a,b);
        add(b,a);
    
    for(int i=1;i<=n;i++)
    k[i]=1<<30;
    k[1]=0;
    for(int i=1;i<=n;i++)fa[i]=i;
    sort(e+1,e+tot+1,cmp);
    int sum=0,p;
    for(int i=1;i<=tot;i++)
        if(find(e[i].to)!=find(e[i].from))
            uni(e[i].from,e[i].to);
            sum+=e[i].data;
            p++;
            if(p==n-1)break;
        
    
    cout<<num-sum;
    return 0;

 

以上是关于局域网的主要内容,如果未能解决你的问题,请参考以下文章

怎样控制局域网病毒

限制局域网网速软件都有哪些 局域网内怎么限制别人网速

局域网攻击怎么检测

局域网连不上网怎么解决

局域网与网桥局域网

delphi局域网通信