zoukankan      html  css  js  c++  java
  • 洛谷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 }
  • 相关阅读:
    将PHP文件生成静态文件源码
    Entity Framework Code First 学习日记(6)一对多关系
    Entity Framework Code First 学习日记(5)
    Entity Framework Code First 学习日记(3)
    Entity Framework Code First 学习日记(7)多对多关系
    Entity Framework Code First学习日记(2)
    Entity Framework Code First 学习日记(8)一对一关系
    Entity Framework Code First 学习日记(9)映射继承关系
    Entity Framework Code First 学习日记(10)兼容遗留数据库
    Entity Framework Code First 学习日记(4)
  • 原文地址:https://www.cnblogs.com/wydxry/p/10574600.html
Copyright © 2011-2022 走看看