poj1861 kruskal

http://poj.org/problem?id=1861

#include
#include
#include
using namespace std;
#define maxn 1001
#define maxm 15001
struct edge
{
    int u,v,w;
} edges[maxm];
int parent[maxn],ans[maxn];
int i,j,N,M;
int maxedge,num,ai;
void ufset()
{
    for(i=0; i=0; s=parent[s]);
    while(s!=x)
    {
        int tmp=parent[x];
        parent[x]=s;
        x=tmp;
    }
    return s;
}
void Union(int R1,int R2)
{
    int r1=find(R1),r2=find(R2);
    int tmp=parent[r1]+parent[r2];
    if(parent[r1]>parent[r2])
    {
        parent[r1]=r2;
        parent[r2]=tmp;
    }
    else
    {
        parent[r2]=r1;
        parent[r1]=tmp;
    }
}
int cmp(const void* a,const void* b)
{
    edge aa=*(const edge*)a;
    edge bb=*(const edge*)b;
    return aa.w-bb.w;
}
void kruskal()
{
    int u,v;
    ufset();
    for(i=0; imaxedge)
                maxedge=edges[i].w;
            num++;
            Union(u,v);
        }
        if(num>N-1)
            break;
    }
}
int main()
{
    //freopen("1.txt","r",stdin);
    while(scanf("%d%d",&N,&M)!=EOF)
    {
        for(i=0; i

  

你可能感兴趣的:(【编程题】)