zoukankan      html  css  js  c++  java
  • poj3522 kruskal+枚举

     题目的意思是求构成生成树的边的最大边和最小边的差最小。枚举即可

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define maxn 102
    struct node
    {
        int x;
        int y;
        int val;
    }s[maxn*(maxn-1)/2];
    int n,m,pa[maxn*(maxn-1)/2];
    bool cmp(node a,node b)
    {
        return a.val>b.val;
    }
    void init()
    {
        int i;
        for(i=0;i<=n;i++)
            pa[i]=i;
    }
    int find(int x)
    {
        if(x!=pa[x])
            pa[x]=find(pa[x]);
        return pa[x];
    }
    void kruskal()
    {
        int i,j,count,min,max,ans,flag;
        count=0;
        flag=0;
        ans=99999999;
        for(i=0;i<m;i++)
        {
            init();
            max=0;min=99999999;count=0;
            for(j=i;j<m;j++)
            {
                int l1,l2;
                l1=find(s[j].x);l2=find(s[j].y);
                if(l1!=l2)
                {
                    pa[l1]=l2;
                    if(max<s[j].val)max=s[j].val;
                    if(min>s[j].val)min=s[j].val;
                    count++;
                }
                
            }
            if(count==n-1){
                flag=1;
                if(ans>max-min)
                    ans=max-min;
            }
        }
        if(flag)
            printf("%d
    ",ans);
        else printf("-1
    ");
    }
    int main()
    {
        int i,j;
        while(scanf("%d%d",&n,&m)!=EOF){
            if(!m&&!n)break;
            for(i=0;i<m;i++)
                scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].val);
            sort(s,s+m,cmp);
            kruskal();
        }
    }
  • 相关阅读:
    Eclipse配置方法注释模板
    彻底清除Github上某个文件以及历史
    eclipse快捷键
    Hibernate执行原生SQL
    API接口规范
    eclipse配置google代码风格
    eclipse format xml
    git撤销commit
    使用postman测试文件上传
    centos7下部署elasticSearch集群
  • 原文地址:https://www.cnblogs.com/sweat123/p/4681857.html
Copyright © 2011-2022 走看看