唉。。。低级错误!!!qsort(ku,m,sizeof(ku[0]),cmp);原来把m写成n;唉。。。搞了整整一天,看来还是不要拿相似题目的代码改,那样错了也不知道在哪里
总结这题,ku数组尽量开大点,其实跟1863差不多的,本以为改下代码肯定能过,谁知,唉。。。说多了都是泪
#include
#include
int fa[105],n,m,s;
struct node
{
int be;
int en;
int cost;
};
struct node ku[6000];
int cmp(const void *aa,const void *bb)
{
struct node *a=(struct node *)aa;
struct node *b=(struct node *)bb;
return a->cost-b->cost;
}
int find(int x)
{
if(fa[x]!=x)
fa[x]=find(fa[x]);
return fa[x];
}
void kruskal()
{
int ka,kb,i;
for(i=0;i
{
ka=find(ku[i].be);
kb=find(ku[i].en);
if(ka==kb)
continue;
else
{
s+=ku[i].cost;
if(ka
fa[kb]=ka;
else
fa[ka]=kb;
}
}
}
main()
{
int i,sf;
while(scanf("%d",&n),n!=0)
{
m=n*(n-1)/2;
for(i=1;i<=n;i++)
fa[i]=i;
for(i=0;i
{
scanf("%d%d%d%d",&ku[i].be,&ku[i].en,&ku[i].cost,&sf);
if(sf==1)
ku[i].cost=0;
}
s=0;
qsort(ku,m,sizeof(ku[0]),cmp);
kruskal();
printf("%d\n",s);
}
}