排序问题
#include<iostream>
#include<cstdio>
#include<algorithm>
int pre[10001];
using namespace std;
struct node
{
int x,y,z,w;
}q[10001];
int compare(node x,node y)
{
return x.z<y.z;
}
int find(int x)
{
int r=x;
while(r!=pre[r])
r=pre[r];
return r;//可以不压缩
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n){
int f1,f2,sum=0;
for(int i=1;i<=n;i++)
{
pre[i]=i;
}
for(int i=1;i<=(n-1)*n/2;i++)
{
scanf("%d %d %d %d",&q[i].x,&q[i].y,&q[i].z,&q[i].w);
if(q[i].w==1)
{
f1=find(q[i].x);
f2=find(q[i].y);
if(f1!=f2)
{
pre[f2]=f1;
}
}
}
sort(q+1,q+(n-1)*n/2+1,compare);//这里出了问题
for(int i=1;i<=(n-1)*n/2;i++)
{
f1=find(q[i].x);
f2=find(q[i].y);
if(f1!=f2)
{
if(q[i].w==0)
{
pre[f2]=f1;
sum+=q[i].z;
}
}
}
printf("%d\n",sum);
}}