Slim Span UVA - 1395(并查集)

                                     Slim Span        UVA - 1395                       

题目链接:https://vjudge.net/problem/UVA-1395

    题意:给定n个节点的图,求一个生成树使得生成树的最大边-最小边的差最小。

    题解:按权值排序后遍历L-R的点看是否满足生成树的条件,满足去找L+1-R,不满足去找L-R+1。如果1-m不满足那么就应该输出-1。

    AC代码:

#include 
#include 
#include 
using namespace std;
const int maxn = 105;
#define _for(i,a,b) for(int i=a;i<=b;i++)
struct node
{
    int x,y,value;
    bool operator< (const node& a)const
    {
        return value>a[i].x>>a[i].y>>a[i].value;
        sort(a+1,a+1+m);
        ans = a[m].value-a[1].value;
        _for(i,1,m)
        {
            _for(j,i+1,m)
            {
                _for(i,1,n)fa[i]=i;
                if(check(i,j))
                {
                    ans=min(ans,a[j].value-a[i].value);
                    break;
                }
            }
        }
        _for(i,1,n)fa[i]=i;
        if(!check(1,m))ans=-1;
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(并查集,OJ系列-UVa,UVA-LA算法题目)