PKU3522(Slim Span)-求差值最小的生成树

题目链接

/*
 *题目大意:
 *一个简单图,n个点,m条边;
 *要求一颗生成树,使得其最大边与最小边的差值是所有生成树中最小的,输出最小的那个差值;

 *算法分析:
 *枚举最小边,用kruskal求生成树,不断更新差值得到最优值;
**/

#include
#include
#include
#include
#include
#include
#include
using namespace std;

const int N=111;
const int M=5555;
const int INF=0xffffff;

int n,m;
int p[N];

struct Edge
{
    int u,v,w;
} e[M];

int cmp(const void *a,const void *b)
{
    Edge *x=(Edge *)a;
    Edge *y=(Edge *)b;
    return x->w-y->w;
}


int find(int x)
{
    if(p[x]!=x)
        p[x]=find(p[x]);
    return p[x];
}

int Kruskal(int s)
{
    int cnt=0;//记录边数
    for(int i=1; i<=n; i++)
        p[i]=i;
    int t=s;
    int flag=1;
    while(t


你可能感兴趣的:(算法题解-图论-最小生成树,算法题解-图论,算法题解-图论-树)