克鲁斯卡尔最小生成树,该如何解决

克鲁斯卡尔最小生成树
HDOJ 1233 继续畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1233 我用克鲁斯卡尔做的,实在不知道哪里WA的,求大神帮忙看看WA在哪里,谢谢,刚才发过一次不小心忘放代码就发出去了,果断被删了,太囧了,这是我的WA的代码:
#include<cstdio>
#include<cstdlib>
#define MAXN 110
#define MAXM 6050
int m,n; 
struct edge
{
  int x;
  int y;
  int w;
}edges[MAXM];
int parent[MAXN];
void UFset()
{
  for(int i=0;i<=MAXN;i++)
  parent[i]=-1;
}
int find(int x)
{  
  int s;
  for(s=x;parent[s]>=0;s=parent[s])
  while(x!=s)
  {
  int temp=parent[x];
  parent[x]=s;
  x=temp;
  }
  return s;
}
void Union(int r1,int r2)
{
  int R1=find(r1),R2=find(r2);
  int temp=parent[R1]+parent[R2];
  if(parent[R1]>parent[R2])
  {
  parent[R1]=R2;
  parent[R2]=temp;
  }
  else
  {
  parent[R2]=R1;
  parent[R1]=temp;
  }
}
int cmp(const void * a,const void * b)
{
  edge aa=*(edge *)a;
  edge bb=*(edge *)b;
  return aa.w-bb.w;
}
void kruskal()
{  
  UFset();
  int weight=0;
  for(int i=1;i<=m&&n>1;i++)
  {  
  if(find(edges[i].x)!=find(edges[i].y))
  {  
  weight+=edges[i].w;
  Union(edges[i].x,edges[i].y);
  n--;
  }
  }
  printf("%d\n",weight);
}
int main()
{  
  while(scanf("%d",&n)!=EOF&&n)
  {  
  m=n*(n-1)/2;
  for(int i=1;i<=m;i++)
  {
  scanf("%d %d %d",&edges[i].x,&edges[i].y,&edges[i].w);
  }
  qsort(edges,m,sizeof(edges[0]),cmp);
  kruskal();
  }
}


------解决方案--------------------
qsort(edges+1,m,sizeof(edges[0]),cmp);
改一下就ok了
像这种简单问题学会自己调试,不要动不动贴代码,对你的编码能力调试能力没有提高的