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

    继续畅通工程

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 22913    Accepted Submission(s): 9796

    Problem Description

    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。

    Input

    测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。
    当N为0时输入结束。

    Output

    每个测试用例的输出占一行,输出全省畅通需要的最低成本。

    Sample Input

    3

    1 2 1 0

    1 3 2 0

    2 3 4 0

    3

    1 2 1 0

    1 3 2 0

    2 3 4 1

    3

    1 2 1 0

    1 3 2 1

    2 3 4 1

    0

    Sample Output

    3

    1

    0

    Author

    ZJU

    Source

    浙大计算机研究生复试上机考试-2008年

    Recommend

    We have carefully selected several similar problems for you:  1863 1102 1856 1272 1301 

     1 #include<cstring>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<iostream>
     5 using namespace std;
     6 const int MAX_N=110;
     7 int n,T,fa[MAX_N],tot;
     8 struct node{
     9     int from,to,value;
    10     bool operator < (const node &a) const{
    11         return value<a.value;
    12     }
    13 }e[MAX_N*MAX_N];
    14 int find(int x){
    15     if(x==fa[x]) return x;
    16     else return fa[x]=find(fa[x]);
    17 }
    18 void Kursual(){
    19     for(int i=1;i<=n;i++)fa[i]=i;
    20     sort(e+1,e+1+tot);
    21     int MST=0,cur=0;
    22     for(int i=1;i<=tot;i++){
    23         int rx=find(e[i].from),ry=find(e[i].to);
    24         if(rx!=ry){
    25             cur++;MST+=e[i].value;
    26             fa[rx]=ry;
    27         }
    28         if(cur == n-1)break;
    29     }
    30     printf("%d
    ",MST);
    31 }
    32 void Add_Edge(int u,int v,int w){
    33     e[++tot].from=u;e[tot].to=v;e[tot].value=w;
    34 }
    35 int main()
    36 {
    37     while(scanf("%d",&n)==1){
    38         if(n==0)break;
    39         tot=0;
    40         for(int i=1,u,v,w,k;i<=n*(n-1)/2;i++){
    41             scanf("%d%d%d%d",&u,&v,&w,&k);
    42             if(k)w=0;
    43             Add_Edge(u,v,w);Add_Edge(v,u,w);
    44         }
    45         Kursual();
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    ASP.NET 高级编程基础第十一篇—WebForm和Page类成员
    ASP.NET 高级编程基础第十三篇—验证控件
    C#委托和事件详解第二篇
    C#委托事件详解第三篇
    点击一个Button,来看Duwamish7的总体层次
    ELMAHError Logging Modules And Handlers
    [实例研究Duwamish]SystemFramework和Common命名空间
    关于Blog的一些周边资源
    .NET框架程序设计Globally Deployment Assembly全局部署程序集
    合并2个DataSet
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6380602.html
Copyright © 2011-2022 走看看