zoukankan      html  css  js  c++  java
  • HDU 1863 畅通工程

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

    裸的最小生成树,只需多判断一下是否连通,我用的方法是看是否只有一个根节点。

    ps:m和n写反了,害我查了1h啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

    View Code
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int idx[1000000];
    struct node{
        int a,b,cost;
    }r[1000000];
    int cmp(const void*a,const void*b)
    {
        return (*(struct node*)a).cost-(*(struct node*)b).cost;
    }
    int find(int n)
    {
        return idx[n]==n?n:idx[n]=find(idx[n]);
    }
    int main()
    {
        int i,n,m;
        int p,q;
        int f;
        while(scanf("%d",&n),n)
        {
            scanf("%d",&m);
            for(i=1;i<=m;i++)
                idx[i]=i;
            for(i=0;i<n;i++)
                scanf("%d%d%d",&r[i].a,&r[i].b,&r[i].cost);
            qsort(r,n,sizeof(struct node),cmp);
            int cost=0;
            for(i=0;i<n;i++)
            {
                p=find(r[i].a);
                q=find(r[i].b);
                if(p!=q)
                {
                    cost+=r[i].cost;
                    idx[p]=q;
                }
            }
            f=0;
            for(i=1;i<=m;i++)
                if(find(i)==i)
                    f++;
            if(f>1)
                printf("?\n");
            else
                printf("%d\n",cost);
        }
        return 0;
    }
  • 相关阅读:
    电源
    SM2947
    网表
    cadence设计思路
    青山依旧在,几度夕阳红
    乐观锁与悲观锁
    笔记
    强弱软虚引用
    缓存相关
    dubbo
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2445319.html
Copyright © 2011-2022 走看看