• [LUOGU] 2820 局域网


    题目背景
    某个局域网内有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)的最大值,就是sum-f(i,j) ( i-j是最小生成树的边)

    #include<iostream>
    #include<algorithm>
    #define MAXN 2005
    using namespace std;
    
    int m,n,w,sum;
    
    int fa[MAXN];
    int fnd(int x){
        if(x==fa[x]) return x;
        return fa[x]=fnd(fa[x]);
    }
    void cat(int x,int y){
        x=fnd(x);y=fnd(y);
        if(x!=y) fa[y]=x;
    }
    
    struct Edge{
        int x,y,w;
    }e[MAXN];
    int ecnt;
    inline void add(int x,int y,int w){
        e[++ecnt].x = x;
        e[ecnt].y = y;
        e[ecnt].w =w;
    }
    
    bool cmp(const Edge &x,const Edge &y){
        return x.w < y.w ;
    }
    
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++) fa[i]=i;
        int x,y,w;
        for(int i=1;i<=m;i++){
            cin>>x>>y>>w;
            sum+=w;
            add(x,y,w);
    //      add(y,x,w);
        }
        sort(e+1,e+1+ecnt,cmp);
        int t=0;
        for(int i=1;i<=m;i++){
            int u=e[i].x ,v=e[i].y ;
            u=fnd(u);v=fnd(v);
            if(u!=v){
                cat(u,v);
                sum-=e[i].w ;
                t++;
            }
            if(t==n-1) break;
        }
        cout<<sum<<endl;
        return 0;
    }

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9247504.html

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9247504.html
Copyright © 2020-2023  润新知