zoukankan      html  css  js  c++  java
  • 杭电3371Connect the Cities

    祖先没赋值,纠结了好久,长个教训

    View Code
     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 int n;
     6 
     7 int set[510];
     8 int f[510],a[510],b[510];
     9 struct PP
    10 {
    11     int u,v;
    12     int pri;
    13 }d[30003];
    14 int cmp(const void *a,const void *b)
    15 {
    16     struct PP *c,*d;
    17     c=(struct PP*)a;
    18     d=(struct PP*)b;
    19     return c->pri-d->pri;
    20 }
    21 int find(int x)
    22 {
    23    if(x==set[x])
    24        return x;
    25    if(x!=set[x])
    26        set[x]=find(set[x]);
    27 
    28 }
    29 int main()
    30 {
    31     int i,j,k,m,t,l;
    32     int x,y,z,dis;
    33     scanf("%d",&l);
    34     while(l--)
    35     {
    36         scanf("%d%d%d",&n,&m,&t);
    37         for(i=1;i<=n;i++)
    38         {
    39             set[i]=i;
    40         }
    41         k=0;
    42         for(i=1;i<=m;i++)
    43         {
    44             scanf("%d%d%d",&x,&y,&z);
    45             d[k].u=x;
    46             d[k].v=y;
    47             d[k].pri=z;
    48             k++;
    49         }
    50         int p,q;
    51         for(i=1;i<=t;i++)
    52         {
    53             scanf("%d",&dis);
    54            scanf("%d",&p);
    55            p=find(p);//必须将其祖先赋值
    56             for(j=1;j<dis;j++)
    57             {
    58                 scanf("%d",&q);
    59                 set[find(q)]=set[p];//让他们的祖先值一致
    60             }
    61 
    62         }
    63         qsort(d,k,sizeof(d[0]),cmp);
    64         int sum=0;
    65         int f1,f2,c,t;
    66         for(i=0;i<k;i++)
    67         {
    68             c=d[i].u;
    69             t=d[i].v;
    70             f1=find(c);
    71             f2=find(t);
    72             if(f1!=f2)//祖先不一样了,将其加上
    73             {
    74                 sum+=d[i].pri;
    75                 set[f1]=f2;
    76             }
    77         }
    78         int h=0;
    79         for(i=1;i<=n;i++)
    80             if(set[i]==i)
    81                 h++;
    82             if(h==1)
    83         printf("%d\n",sum);
    84             else
    85                 printf("-1\n");
    86     }
    87     return 0;
    88 }
  • 相关阅读:
    java包和jar包
    java异常总结
    java异常练习2
    java中的异常处理机制_函数覆盖时的异常特点
    React(三)TableBar,ToDoList,Redux案例
    React(二)组件通信
    React(二)组件通信
    React(一)起步
    React(一)起步
    Vue(二)进阶
  • 原文地址:https://www.cnblogs.com/zlyblog/p/2616497.html
Copyright © 2011-2022 走看看