zoukankan      html  css  js  c++  java
  • hdu 1879 继续畅通工程

    http://acm.hdu.edu.cn/showproblem.php?pid=1879

    这道题可以把已修建的道路的费用置为0,然后用prim和kruskal都可以求出。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 20000
     5 using namespace std;
     6 
     7 int u[maxn],v[maxn],r[maxn],s[maxn],f[maxn],w[maxn];
     8 int dis[maxn];
     9 bool vis[maxn];
    10 int sum=0,n;
    11 int cmp(const int i,const int j) {return w[i]<w[j];}
    12 int Find(int x) {return f[x]==x?x:f[x]=Find(f[x]);}
    13 
    14 int main()
    15 {
    16     while(scanf("%d",&n)!=EOF)
    17     {
    18         memset(u,0,sizeof(u));
    19         memset(v,0,sizeof(v));
    20         memset(s,0,sizeof(s));
    21         if(n==0) break;
    22         sum=0;
    23         for(int i=0; i<n*(n-1)/2; i++)
    24         {
    25             scanf("%d%d%d%d",&u[i],&v[i],&w[i],&s[i]);
    26             if(s[i]==1) w[i]=0;
    27         }
    28         for(int i=0; i<=n; i++) f[i]=i;
    29         for(int i=0; i<n*(n-1)/2; i++) r[i]=i;
    30         sort(r,r+n*(n-1)/2,cmp);
    31         for(int i=0; i<n*(n-1)/2; i++)
    32         {
    33             int e=r[i]; int x=Find(u[e]); int y=Find(v[e]);
    34             if(x!=y)
    35             {
    36                 sum+=w[e];
    37                 f[x]=y;
    38             }
    39         }
    40         printf("%d
    ",sum);
    41     }
    42     return 0;
    43 }
    View Code
  • 相关阅读:
    hdu4273Rescue(三维凸包重心)
    hdu4449Building Design(三维凸包+平面旋转)
    hdu3847Trash Removal(凸包)
    CodeForces 166B (凸包)
    机器学习文章导航
    梯度下降法深入
    插值法
    离散系统频域分析
    离散系统时域分析
    连续系统频域分析
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3667250.html
Copyright © 2011-2022 走看看