zoukankan      html  css  js  c++  java
  • 专题四--1005

    1005

    题目

    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

    题目大意

    又见“畅通工程”,这些题目千篇一律。这道题目相较上一题,只是增加了事先修建过道路这一条件。只需在读入数据时将以修建过道路的两个村庄并入一个集合即可。在最终的道路选择过程中,去除这些道路即可。

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int MAX=105;
    int c[MAX];
    struct xy
    {
        int x;
        int y;
        int c;
    }dis[MAX*(MAX-1)/2];
    int find(int i)
    {
        while(c[i]!=i)
            i=c[i];
        return c[i];
    }
    void merg(int a,int b)
    {
        a=find(a);
        b=find(b);
        if(a!=b){
            c[a]=c[b];
        }
    }
    bool cmp(xy a,xy b)
    {
        return a.c<b.c;
    }
    int main()
    {
        //freopen("date.in","r",stdin);
        //freopen("date.out","w",stdout);
        int n,tem,res;
        while(cin>>n&&n!=0){
            res=0;
            for(int i=1;i<=n;i++){
                c[i]=i;
            }
            for(int i=0;i<n*(n-1)/2;i++){
                scanf("%d%d%d%d",&dis[i].x,&dis[i].y,&dis[i].c,&tem);
                if(tem==1)
                    merg(dis[i].x,dis[i].y);
            }
            sort(dis,dis+n*(n-1)/2,cmp);
            for(int i=0;i<n*(n-1)/2;i++){
                if(find(dis[i].x)!=find(dis[i].y)){
                    res+=dis[i].c;
                    merg(dis[i].x,dis[i].y);
                }
            }
            printf("%d
    ",res);
        }
    }
    
  • 相关阅读:
    如何在Ubuntu下通过USB连接iPone/iPod
    全手动封装教程+SRS9.80102 文本教程(适合初学)
    PHP 面试踩过的坑
    视频 | 一步步教你操作websocket通知案例
    在职场,辞退你、培养你,从来不是看能力
    git撤销本地修改与回退版本
    异步发送邮件完整示例
    如何解决Redis缓存和MySQL数据一致性的问题?
    PHP 面试踩过的坑(二)
    守护进程、信号和平滑重启
  • 原文地址:https://www.cnblogs.com/liuzhanshan/p/5648586.html
Copyright © 2011-2022 走看看