• hdu 3371Connect the Cities


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

    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 int root[510];
     5 struct Node
     6 {
     7     int start,end;
     8     int len;
     9 }node[25010];
    10 int cmp(const void*x,const void*y)
    11 {
    12     return (*(Node*)x).len-(*(Node*)y).len;
    13 }
    14 int find(int x)
    15 {
    16     int r=x;
    17     while(r!=root[r])
    18     r=root[r];
    19     int i=x,j;
    20     while(i!=r)
    21     {
    22         j=root[i];
    23         root[i]=r;
    24         i=j;
    25     }
    26     return r;
    27 }
    28 void merge(int x,int y)
    29 {
    30     int fx,fy;
    31     fx=find(x);
    32     fy=find(y);
    33     if(fx!=fy) root[fx]=fy;
    34 }
    35 int main()
    36 {
    37     
    38     int t;
    39     int n,m,k;
    40     int i,j,kk;
    41     int a,b,c;
    42     scanf("%d",&t);
    43     while(t--)
    44     {
    45         scanf("%d%d%d",&n,&m,&k);
    46         for(i=1;i<=n;i++)
    47         root[i]=i;
    48         for(i=0;i<m;i++)
    49         {
    50             scanf("%d%d%d",&node[i].start,&node[i].end,&node[i].len);
    51         }
    52         qsort(node,m,sizeof(node[0]),cmp);
    53         for(i=1;i<=k;i++)
    54         {
    55             scanf("%d%d%d",&kk,&a,&b);
    56             merge(a,b);
    57             for(j=3;j<=kk;j++)
    58             {
    59                 scanf("%d",&c);
    60                 merge(a,c);
    61             }
    62         }
    63         int sum=0;
    64         for(i=0;i<m;i++)
    65         {
    66             if(find(node[i].start)!=find(node[i].end))
    67             {
    68                 sum+=node[i].len;
    69                 merge(node[i].start,node[i].end);
    70             }
    71         }
    72         int count=0;
    73         for(i=1;i<=n;i++)
    74         {
    75             if(find(i)==i) count++;
    76         }
    77         if(count>1) printf("-1\n");
    78        else        printf("%d\n",sum);
    79     }
    80 }
  • 相关阅读:
    JQuery源码解析(十一)
    Oracle帮助类
    JQuery正则验证
    MVC的过滤器
    JQuery源码解析(十)
    JavaScript封装的几种方式
    ps小技巧
    Fragment 的用法小技巧
    onCreateOptionsMenu 和 onPrepareOptionsMenu 的区别
    Axure 注册码
  • 原文地址:https://www.cnblogs.com/1114250779boke/p/2637090.html
Copyright © 2020-2023  润新知