zoukankan      html  css  js  c++  java
  • 图7 公路村村通

    题目:https://pintia.cn/problem-sets/1268384564738605056/problems/1286606445168746496
    题解:https://blog.csdn.net/whd526/article/details/50718811
    代码:

        #include<stdio.h>
        #define MAX 1005
        struct node{
            int u;
            int v;
            int w;
        };
        int f[MAX];
        int count = 0, sum = 0;
        struct node e[3*MAX];
        void quicksort(int left,int right){
            if(left>right)
            return;
            int i = left;
            int j = right;
            struct node temp;
            while(i != j){
                while(e[j].w >= e[left].w && i<j)
                    j--;
                while(e[i].w <= e[left].w && i<j )
                    i++;
                if(i < j){
                    temp = e[i];
                    e[i] = e[j];
                    e[j] = temp;
                }
            }
            temp = e[i];
            e[i] = e[left];
            e[left] = temp;
            quicksort(left, i-1);
            quicksort(i+1, right);
            return;
        }
        int getf(int v){
            if(f[v]==v)
            return v;
            else
            f[v] = getf(f[v]);
            return f[v]; 
        }
        int merge(int v,int u){
            int t1 = getf(v);
            int t2 = getf(u);
            if(t1 != t2){
                f[t2] = t1;
                return 1;
            }
            return 0;
        }
        int main()
        {
            int n,m;
            scanf("%d",&n);
            scanf("%d",&m);
            for(int i = 1; i <= m; ++i){
                scanf("%d %d %d", &e[i].u, &e[i].v, &e[i].w);
            }
            quicksort(1, m);
            for(int i = 1; i <= n; ++i){
                f[i]=i;
            }
            for(int i = 1; i <= m; ++i){
                if(merge(e[i].u,e[i].v)){
                    count++;
                    sum = sum + e[i].w;
                }
                if(count == n-1)
                break;
            }
            if(count != n-1)
                printf("-1
    ");
            else
                printf("%d
    ",sum);
            return 0;
         } 



  • 相关阅读:
    python 字符串中的%s与format
    python中的virtualenv是干嘛的?
    grep 与 find 简单命令
    git merge 和 git rebase的区别
    git stash的用法
    git push的用法
    git pull与git fetch的区别
    辟谣平台 踩坑记(一)
    微信JS-SDK开发 入门指南
    linux 写U盘出现的问题
  • 原文地址:https://www.cnblogs.com/simon-chou/p/13620072.html
Copyright © 2011-2022 走看看