• 洛谷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)的最大值

    输入输出样例

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

    所有边数权值之和减去最小生成树
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <string>
     5 #include <cstring>
     6 using namespace std;
     7 int n,k,res;
     8 struct edge
     9 {
    10     int u,v,cost;
    11 }es[10005];
    12 int par[10005];
    13 void init()
    14 {
    15     for(int i=0;i<1000;i++) par[i]=i;
    16 }
    17 int Find(int x)
    18 {
    19     if(par[x]==x) return x;
    20     else return Find(par[x]);
    21 }
    22 int cmp(edge x,edge y)
    23 {
    24     return x.cost<y.cost;
    25 }
    26 int kruscal()
    27 {
    28     init();
    29     sort(es,es+k,cmp);
    30     res=0;
    31     for(int i=0;i<k;i++){
    32         edge e=es[i];
    33         if(Find(e.u)==Find(e.v)) continue;
    34         par[Find(e.u)]=Find(e.v);
    35         res+=e.cost;
    36     }    
    37     return res;
    38 }
    39 int main()
    40 {
    41     while(cin>>n>>k){
    42         int sum=0;
    43         for(int i=0;i<k;i++){
    44             cin>>es[i].u>>es[i].v>>es[i].cost;
    45             sum+=es[i].cost;
    46         }
    47         cout<<sum-kruscal()<<endl;
    48     }
    49     return 0;
    50 }

     还是菜的一P,中了n的毒,不能放松警惕啊

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 const int maxn=1005;
     5 int n,k,cnt,res,sum;
     6 struct edge
     7 {
     8     int u,v,w;
     9 }es[maxn];
    10 int cmp(edge x,edge y)
    11 {
    12     return x.w<y.w;
    13 }
    14 int par[maxn];
    15 void init()
    16 {
    17     for(int i=0;i<maxn;i++) par[i]=i;
    18 }
    19 int Find(int x)
    20 {
    21     if(par[x]==x) return x;
    22     else return Find(par[x]);
    23 }
    24 int kruscal()
    25 {
    26     init();
    27     sort(es,es+k,cmp);
    28     res=0;
    29     cnt=n;
    30     for(int i=0;i<k;i++){
    31         int u=es[i].u,v=es[i].v,w=es[i].w;
    32         if(Find(u)==Find(v)) continue;
    33         par[Find(u)]=Find(v);
    34         res+=w;
    35         if(--cnt==1) break;
    36     }
    37     return res;
    38 }
    39 int main()
    40 {
    41     while(cin>>n>>k){
    42         sum=0;
    43         for(int i=0;i<k;i++){
    44             cin>>es[i].u>>es[i].v>>es[i].w;
    45             sum+=es[i].w;
    46         }
    47         cout<<sum-kruscal()<<endl;
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    mac 10.9 安装 gevent
    flash builder4.7 for Mac升级AIRSDK详解
    重走java--Step 3
    重走java--Step 2
    重走java---Step 1
    web初学之MVC
    web初学之JavaBean
    微信公众号开发之开发模式的启用——学习笔记
    微信公众号开发之开通账号——学习笔记
    web初学之request,session与application
  • 原文地址:https://www.cnblogs.com/shixinzei/p/10574600.html
Copyright © 2020-2023  润新知