zoukankan      html  css  js  c++  java
  • HDU 1863 畅通工程 最下生成树问题

    题目描述:给出图,要你求是否存在最小生成树,如果存在,要求输出最小权值和,如果不存在,输出?

    解题报告:又是一个最裸的克鲁斯卡尔,并且要判断是否存在最小生成树的问题。废话不多说,给个短代码:

     1 #include<cstdio>
     2 #include<algorithm>
     3 const int MAX = 100+5;
     4 int N,M,prim[MAX];
     5 int find(int k) {
     6 return prim[k]==k? k:prim[k] = find(prim[k]);
     7 }
     8 struct node {
     9     int x,y,length;
    10 }rode[MAX];
    11 int cmp(node a,node b) {
    12     return a.length<b.length;
    13 }
    14 int main() {
    15     while(scanf("%d%d",&N,&M),N) {
    16         for(int i = 0;i<N;++i)
    17         scanf("%d%d%d",&rode[i].x,&rode[i].y,&rode[i].length);
    18         std::sort(rode,rode+N,cmp);
    19         for(int i = 1;i<=M;++i)
    20         prim[i] = i;
    21         int sum = 0;
    22         for(int i = 0;i<N;++i)
    23         if(find(rode[i].x) != find(rode[i].y)) {
    24             prim[find(rode[i].x)] = find(rode[i].y);
    25             sum+=rode[i].length;
    26         }
    27         bool flag = 0;
    28         for(int i = 2;i<=M;++i)
    29         if(find(i) != find(1)) {
    30             flag = 1;
    31             break;
    32         }
    33         if(flag) {
    34             printf("?
    ");
    35             continue;
    36         }
    37         printf("%d
    ",sum);
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    C++ 实现简单快速排序
    LEETCODE 198. House Robber
    leetcode 174
    GIT 版本的回退
    unorderd_map 自定义键值及哈希函数的重载
    互斥锁 形成死锁实例
    leetcode 300
    LeetCode 62
    LeetCode 122
    SVN提交,强制注释
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3226412.html
Copyright © 2011-2022 走看看