zoukankan      html  css  js  c++  java
  • nyoj 38 布线问题

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38


    最小生成树水题~

    代码:

    #include "stdio.h"  // 最小生成树 Kruskal
    #include "string.h"
    #include "stdlib.h"
    
    #define N 505
    #define INF 0x3fffffff
    int set[N];
    
    int find(int x){ return set[x]==x?x:find(set[x]); }
    
    void Init(int n){ for(int i=1; i<=n; ++i) set[i]=i; }
    
    struct node
    {
        int x,y;
        int cost;
    }p[N*N];
    
    int cmp(const void *a,const void *b)
    {
        node *c = (node *)a;
        node *d = (node *)b;
        return c->cost - d->cost;
    }
    
    int main()
    {
        int T;
        int n,m;
        int i,k;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d %d",&n,&m);
            for(i=0; i<m; ++i)
                scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].cost);
            qsort(p,m,sizeof(p[0]),cmp);
            int ans = INF;
            for(i=0; i<n; ++i)
            {
                scanf("%d",&k);
                ans = ans<k?ans:k;
            }
            Init(n);
            int fa,fb;
    
            for(i=0; i<m; ++i)
            {
                fa = find(p[i].x);
                fb = find(p[i].y);
                if(fa==fb) continue;
                ans += p[i].cost;
                if(fa>fb)
                    set[fa] = fb;
                else
                    set[fb] = fa;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    第五次作业
    第四次作业
    Java实验二
    java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
  • 原文地址:https://www.cnblogs.com/ruo-yu/p/4411957.html
Copyright © 2011-2022 走看看