zoukankan      html  css  js  c++  java
  • 还是畅通工程

    一看到这题总是以为要用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;
    }
    

      

  • 相关阅读:
    Median of Two Sorted Arrays
    Two Sum
    C# Socket服务端和客户端互相send和receive
    C++ 虚函数和虚函数表
    C++ 类型转换
    C# 几种退出程序的方式
    进程判断及简单操作
    C#根据函数名称执行对应的函数
    C# DateTime格式化
    nginx常用代理配置
  • 原文地址:https://www.cnblogs.com/yintoki/p/5702786.html
Copyright © 2011-2022 走看看