UVa 10048 - Audiophobia

模拟kruskal的过程,一条边一条边的加入树中,每加入一次,就判断起点和终点是否在一个集合里, 一旦他们在一个集合里了,那么那条路径中的最大值便是当前加入的这条边的权值,因为加入的边是按照从小到大顺序加入的。

代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int DMAXN = 105;
const int EMAXN = 1005;
int c, s, q, x, y, val;
int p[DMAXN], u[EMAXN], v[EMAXN], r[EMAXN], dis[EMAXN];
int cmp(const int i, const int j)
{
    return dis[i] < dis[j];
}
int find(int i)
{
    return p[i] == i ? i : (p[i] = find(p[i]));
}
void Kruskal()
{
    int px, py;
    for(int i=1; i<=c; i++)
        p[i] = i;
    for(int i=0; i 0)
                printf("%d\n", val);
            else
                printf("no path\n");
        }
        ff = 1;
    }
    return 0;
}


你可能感兴趣的:(最小生成树,UVa)