• 还是畅通工程


    一看到这题总是以为要用dijkstra算法,但是根据描述怎么想都不对,然后去搜了一下思路,应该还是并查集,然后定义一个结构体,思路就是排序,然后查找,合并,但是怎么说总感觉很多地方很奇怪,自己写的,那个排序函数也不清楚,然后就去看一了一下,之后就直接给代码了。

    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<string.h>
    struct point{
        int x,y;
        int s;
    }num[5008];
    int flag[102];
    int cmp(const void *a,const void *b)
    {
        struct point *c,*d;
        c=(struct point *)a;
        d=(struct point *)b;
        return c->s-d->s;
    }
    int find(int x)
    {
        if(x==flag[x])
            return x;
        flag[x]=find(flag[x]);
        return flag[x];
    }
    int main()
    {
        int n,i,sum,ra,rb;
        while(scanf("%d",&n),n)
        {
            for(i=0;i<=n;i++)
                flag[i]=i;
            for(i=0;i<n*(n-1)/2;i++)
                scanf("%d%d%d",&num[i].x,&num[i].y,&num[i].s);
            qsort(num,n*(n-1)/2,sizeof(num[0]),cmp);
            sum=0;
            for(i=0;i<n*(n-1)/2;i++)
            {
                ra=find(num[i].x);
                rb=find(num[i].y);
                if(ra==rb)continue;
                else {
                    sum+=num[i].s;
                    if(ra<rb)
                        flag[rb]=ra;
                    else flag[ra]=rb;
                }
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    

      

  • 相关阅读:
    upcoj 2169 DP
    hdu3415 单调队列
    hdu4417(树状数组)(线段树)(划分树+二分)
    poj3264 线段树水题
    STL Map hdu1004,1075,1263
    hdu1166线段树水题
    <<<<<<<<<用来存代码哒!!!!>>>>>>>>>>>>
    jQuery
    apache配置php
    linux关机、重启命令
  • 原文地址:https://www.cnblogs.com/yintoki/p/5702786.html
Copyright © 2020-2023  润新知