zoukankan      html  css  js  c++  java
  • HDU 1879 继续畅通工程(最小生成树)

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

    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

    题解:与之前的有一些变化 需要处理一下 当道路修通时,规定一节点为另一节点的父亲
       用自定义结构体排序再写一遍
     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,flag;
    38     bool operator <(const edge &other)const
    39     {
    40         return w<other.w;
    41     }
    42 }a[N];
    43 void init()
    44 {
    45     for(int i=1;i<=N;i++)
    46         f[i]=i;
    47 }
    48 int find1(int x)
    49 {
    50     if(x!=f[x])
    51         f[x]=find1(f[x]);
    52     return f[x];
    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 %d",&a[i].u,&a[i].v,&a[i].w,&a[i].flag);
    63             if(a[i].flag) f[a[i].u]=a[i].v;
    64         }
    65         sort(a,a+m);
    66         int s=0;
    67         for(int i=0;i<m;i++){
    68             int u=a[i].u,v=a[i].v,w=a[i].w;
    69             if(find1(u)==find1(v)) continue;
    70             f[find1(u)]=find1(v);
    71             s+=w;
    72         }
    73         printf("%d
    ",s);
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    oracle 常用SQL
    ActiveMQ持久化方式
    集中队列的模式
    EDA: Event-Driven Architecture事件驱动架构
    ActiveMQ消息队列介绍
    Nginx 用log_format设置日志格式
    log4j的ConversionPattern参数的格式含义
    真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService
    Java的注解机制——Spring自动装配的实现原理
    java interface 默认值
  • 原文地址:https://www.cnblogs.com/wydxry/p/7279846.html
Copyright © 2011-2022 走看看