• P2820 局域网


    题目传送门

    黄色的MST板子,真香~~~直接累加所有边权之后跑一边Kruskal,减掉MST重量即可

    参考代码如下:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 struct node
     5 {
     6     int u,v,w;
     7 };
     8 node f[200001];
     9 bool cmp(node a,node b)
    10 {
    11     return a.w<b.w;
    12 }
    13 int n,m,parent[5005],weight,num,sum;
    14 int find(int x)
    15 {
    16     if(parent[x]==x)return x;
    17     else return parent[x]=find(parent[x]);
    18 }
    19 void Union(int R1,int R2)
    20 {
    21     int r1=find(R1),r2=find(R2);
    22     parent[r1]=r2; 
    23 }
    24 int main()
    25 {
    26     cin>>n>>m;
    27     for(int i=1;i<=n;i++)parent[i]=i;
    28     for(int i=1;i<=m;i++)
    29     {
    30         cin>>f[i].u>>f[i].v>>f[i].w;
    31         sum+=f[i].w;
    32     }
    33     sort(f+1,f+m+1,cmp);
    34     for(int i=1;i<=m;i++)
    35     {
    36         int u=find(f[i].u),v=find(f[i].v);
    37         if(u!=v)
    38         {
    39             num++;
    40             weight+=f[i].w;
    41             Union(u,v);
    42         }
    43         if(num==n-1)break;
    44     }
    45     cout<<sum-weight;
    46     return 0;
    47 }
    View Code

      

  • 相关阅读:
    回溯算法总结
    第四章总结
    第四章编程总结
    动态规划总结:
    第三章实践心得
    分治算法体会
    第二章上机实践总结
    代码规范与《数学之美》读后感
    第二次c++作业
    第一次博客作业
  • 原文地址:https://www.cnblogs.com/szmssf/p/10997388.html
Copyright © 2020-2023  润新知