zoukankan      html  css  js  c++  java
  • [tsA1491][2013中国国家集训队第二次作业]家族[并查集]

    m方枚举,并查集O(1)维护,傻逼题,,被自己吓死搞成神题了。。。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 struct tri { int x,y,z; bool operator<(const tri & temp)const { return z<temp.z; } };
     6 
     7 int    n,m,k,Sum,Ans=0x7fffffff,a[1100],Size[1100],f[1100];
     8 
     9 vector<tri>    vec;
    10 
    11 int    get_anc(const int x)
    12 {
    13     return x==f[x]?x:f[x]=get_anc(f[x]);
    14 }
    15 
    16 void    Union(const int x,const int y)
    17 {
    18     int S=get_anc(x),T=get_anc(y);
    19     if(S==T)return ;
    20     Sum-=a[Size[S]]+a[Size[T]];
    21     Sum+=a[Size[S]+Size[T]];
    22     Size[T]+=Size[S];
    23     f[S]=T; return ;
    24 }
    25 
    26 int main()
    27 {
    28     int    i,j,x,y,z;
    29 
    30     scanf("%d%d%d",&n,&m,&k);
    31     for(i=1;i<=n;++i)
    32     {
    33         scanf("%d",&a[i]);
    34     }
    35     for(i=1;i<=m;++i)
    36     {
    37         scanf("%d%d%d",&x,&y,&z);
    38         vec.push_back((tri){x,y,z});
    39     }
    40 
    41     sort(vec.begin(),vec.end());
    42 
    43     for(i=0;i<m;++i)
    44     {
    45         for(j=1;j<=n;++j)f[j]=j,Size[j]=1;
    46         Sum=n*a[1];
    47         for(j=i;j<m;++j)
    48         {
    49             Union(vec[j].x,vec[j].y);
    50             if(Sum>=k){Ans=min(Ans,vec[j].z-vec[i].z);break;}
    51         }
    52     }
    53 
    54     if(Ans!=0x7fffffff)printf("%d
    ",Ans);
    55     else    printf("T_T
    ");
    56     return 0;
    57 }
  • 相关阅读:
    链表首尾节点的常规方案
    MYSQL 学习
    卡尔曼滤波
    降维技术
    Hurst指数python实现
    一维GMM的Python代码实现
    对数周期幂率模型(LPPL)
    paper 112:hellinger distance
    paper 111:图像分类物体目标检测 from RCNN to YOLO
    paper 110:凸优化和非凸优化
  • 原文地址:https://www.cnblogs.com/Gster/p/5090530.html
Copyright © 2011-2022 走看看