zoukankan      html  css  js  c++  java
  • 【kruscal】【最小生成树】poj3522 Slim Span

    求一个生成树,使得最大边权和最小边权之差最小。由于数据太小,暴力枚举下界,求出相应的上界。最后取min即可。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 int n,m,fa[101],rank[101];
     6 void clear(){for(int i=1;i<=n;i++) fa[i]=i; memset(rank,0,sizeof(rank));}
     7 int findroot(int x) 
     8 {
     9     if(fa[x]==x) return x;
    10     int rt=findroot(fa[x]);
    11     fa[x]=rt;
    12     return rt;
    13 }
    14 void Union(int U,int V)
    15 {
    16     if(rank[U]<rank[V]) fa[U]=V;
    17     else
    18       {
    19         fa[V]=U;
    20         if(rank[U]==rank[V]) rank[U]++;
    21       }
    22 }
    23 struct Edge{int u,v,w;};
    24 bool cmp(const Edge &a,const Edge &b){return a.w<b.w;}
    25 Edge edges[5001];
    26 int tot,ans,maxv;
    27 int main()
    28 {
    29     while(1)
    30       {
    31           scanf("%d%d",&n,&m);
    32           if(!n) break;
    33           for(int i=1;i<=m;i++) scanf("%d%d%d",&edges[i].u,&edges[i].v,&edges[i].w);
    34           sort(edges+1,edges+m+1,cmp); ans=2147483647;
    35           for(int j=1;j<=m;j++)
    36             {
    37                 tot=0; clear();
    38                 for(int i=j;i<=m;i++)
    39                 {
    40                     int f1=findroot(edges[i].u),f2=findroot(edges[i].v);
    41                     if(f1!=f2) {Union(f1,f2); tot++; if(tot==n-1) {maxv=edges[i].w; goto WIN;}}
    42                 }
    43               continue;
    44               WIN:ans=min(ans,maxv-edges[j].w);
    45             }
    46           printf("%d
    ",ans!=2147483647 ? ans : -1);
    47       }
    48     return 0;
    49 }
  • 相关阅读:
    【Py】Python的调包日常——网络类
    【Py】Python的调包日常——转码类
    第09组 Beta冲刺(3/5)
    第09组 Beta冲刺(2/5)
    第09组 Beta冲刺(1/5)
    第09组 Alpha事后诸葛亮
    第09组 Alpha冲刺(6/6)
    第09组 Alpha冲刺(5/6)
    第09组 Alpha冲刺(4/6)
    第09组 Alpha冲刺(3/6)
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4019223.html
Copyright © 2011-2022 走看看