• 继续畅通工程


    http://acm.hdu.edu.cn/showproblem.php?pid=1879

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    using namespace std;
    int n,tt;
    int tx[102],ty[102];
    struct node
    {
        int x,y;
        int w;
        int flag;
    }edge[101*100/2+1];
    int bin[102];
    void add(int u,int v,int w1,int e)
    {
        edge[tt].x=u;
        edge[tt].y=v;
        edge[tt].w=w1;
        edge[tt].flag=e;
        tt++;
    }
    int cmp(const void *a,const void *b)
    {
        struct node *aa=(struct node *)a;
        struct node *bb=(struct node *)b;
        if(aa->flag!=bb->flag)
            return bb->flag-aa->flag;
        else return aa->w-bb->w;
    }
    int findx(int x)
    {
        int r=x;
        while(r!=bin[r])
            r=bin[r];
        int j,k;
        j=x;
        while(j!=r)
        {
            k=bin[j];
            bin[j]=r;
            j=k;
        }
        return r;
    }
    void merge(int x,int y)
    {
        int fx=findx(x);
        int fy=findx(y);
        if(fx!=fy)
            bin[fx]=fy;
    }
    void Kuscal()
    {
        int sum=0;
        int ll=1;//最小生成树n-1条边
        int i=0;
        while(ll<n&&i<tt)
        {
            if(ll==n) break;
            if(findx(edge[i].x)!=findx(edge[i].y))
            {
                merge(findx(edge[i].x),findx(edge[i].y));
                if(edge[i].flag==0)
                sum=sum+edge[i].w;
                ll++;
            }
            i++;
        }
        printf("%d
    ",sum);
    
    
    }
    int main()
    {
        int x1,y1,z1,flag1;
        while(scanf("%d",&n)!=EOF&&n!=0)
        {
            tt=0;
            for(int i=1;i<=n;i++)
                bin[i]=i;
           for(int i=0;i<n*(n-1)/2;i++)
            {
                scanf("%d%d%d%d",&x1,&y1,&z1,&flag1);
                add(x1,y1,z1,flag1);
            }
            qsort(edge,tt,sizeof(edge[0]),cmp);
           Kuscal();
        }
        return 0;
    }
  • 相关阅读:
    Flask下如何处理Requests 上传中文文件名的问题
    xml.etree.ElementTree对CDATA的输出
    Java 实现HTML富文本导出至word完美解决方案
    tornado学习笔记18 _RequestDispatcher 请求分发器
    哗啦啦Python之路
    哗啦啦Python之路
    哗啦啦python金融量化之路
    哗啦啦Python之路
    哗啦啦Python之路
    哗啦啦Python之路
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3809659.html
Copyright © 2020-2023  润新知