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 }
  • 相关阅读:
    laydate日期插件弹出闪退和多次闪退问题解决
    IconFont 图标的3种引用方式
    jquery操作select下拉框的多种方法(选中,取值,赋值等)
    jquery获取select选中项 自定义属性的值
    Centos查看端口占用、开启端口
    IaaS,PaaS,SaaS 的区别
    IOS手机使用Fiddler抓包(HTTPS)(二)
    Android手机使用Fiddler抓包(HTTPS)(二)
    Fiddler使用详解(一)
    python2.x和python3.x中raw_input( )和input( )区别
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6380602.html
Copyright © 2011-2022 走看看