zoukankan      html  css  js  c++  java
  • HDU 1233 还是畅通工程 (最小生成树 )

    某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 

    Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 
    当N为0时,输入结束,该用例不被处理。 
    Output对每个测试用例,在1行里输出最小的公路总长度。 
    Sample Input

    3
    1 2 1
    1 3 2
    2 3 4
    4
    1 2 1
    1 3 4
    1 4 1
    2 3 3
    2 4 2
    3 4 5
    0

    Sample Output

    3
    5
    

     题解:套模板

    还是菜得一P啊

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 const int maxn=10005;
     5 int n,res,m;
     6 int par[maxn];
     7 struct node
     8 {
     9     int u,v,w;
    10 }es[maxn];
    11 int cmp(node x,node y)
    12 {
    13     return x.w<y.w;
    14 }
    15 void init()
    16 {
    17     for(int i=1;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 deal()
    25 {
    26     init();
    27     sort(es,es+m,cmp);
    28     res=0;
    29     for(int i=0;i<m;i++){
    30         int u=es[i].u,v=es[i].v,w=es[i].w;
    31         if(Find(u)==Find(v)) continue;
    32         par[Find(u)]=Find(v);
    33         res+=w;
    34     }
    35     return res;
    36 }
    37 int main()
    38 {
    39     while(cin>>n&&n){
    40         m=n*(n-1)/2;
    41         for(int i=0;i<m;i++){
    42             cin>>es[i].u>>es[i].v>>es[i].w;
    43         }
    44         cout<<deal()<<endl;
    45     }
    46     return 0;
    47 }

    。。。。。。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <vector>
     6 #include <cstdlib>
     7 #include <iomanip>
     8 #include <cmath>
     9 #include <ctime>
    10 #include <map>
    11 #include <set>
    12 #include <queue>
    13 using namespace std;
    14 #define lowbit(x) (x&(-x))
    15 #define max(x,y) (x>y?x:y)
    16 #define min(x,y) (x<y?x:y)
    17 #define MAX 100000000000000000
    18 #define MOD 1000000007
    19 #define pi acos(-1.0)
    20 #define ei exp(1)
    21 #define PI 3.141592653589793238462
    22 #define INF 0x3f3f3f3f3f
    23 #define mem(a) (memset(a,0,sizeof(a)))
    24 typedef long long ll;
    25 ll gcd(ll a,ll b){
    26     return b?gcd(b,a%b):a;
    27 }
    28 bool cmp(int x,int y)
    29 {
    30     return x>y;
    31 }
    32 const int N=10005;
    33 const int mod=1e9+7;
    34 int f[N];
    35 struct edge
    36 {
    37     int u,v,w;
    38 }a[N];
    39 void init()
    40 {
    41     for(int i=1;i<=N;i++)
    42         f[i]=i;
    43 }
    44 int find1(int x)
    45 {
    46     if(x!=f[x])
    47         f[x]=find1(f[x]);
    48     return f[x];
    49 }
    50 bool cmp1(edge a,edge b)
    51 {
    52     return a.w<b.w;
    53 }
    54 int main()
    55 {
    56     std::ios::sync_with_stdio(false);
    57     int n,m;
    58     while(scanf("%d",&n)&&n){
    59         init();
    60         m=n*(n-1)/2;
    61         for(int i=0;i<m;i++)
    62             scanf("%d %d %d",&a[i].u,&a[i].v,&a[i].w);
    63         sort(a,a+m,cmp1);
    64         int s=0;
    65         for(int i=0;i<m;i++){
    66             int u=a[i].u,v=a[i].v,w=a[i].w;
    67             if(find1(u)==find1(v)) continue;
    68             f[find1(u)]=find1(v);
    69             s+=w;
    70         }
    71         printf("%d
    ",s);
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    python
    django admin 扩展
    django-cms 代码研究(八)app hooks
    django-cms 代码研究(七)杂七杂八
    django revision
    django-cms 代码研究(六)plugin的深入分析
    django-cms 代码研究(五)深入(代码结构)
    c# 如何使用wlanapi连接电脑到wifi
    django-cms 代码研究(四)CMS_TEMPLATE标签
    django静态文件查找逻辑
  • 原文地址:https://www.cnblogs.com/shixinzei/p/7279626.html
Copyright © 2011-2022 走看看