Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24069 Accepted Submission(s): 10695
#include
#include
using namespace std;
#define MAXN 100
#define maxn MAXN*(MAXN-1)/2
int father[maxn];
int find(int x)
{
return x==father[x]?x:father[x]=find(father[x]);
}
struct in
{
int start;
int end;
int value;
};
bool cmp(in a,in b)
{
return a.value
int Union(int a,int b,int c)
{
int num=0;
int x=find(a);
int y=find(b);
printf("a=%d b=%d\n",x,y);
if(x!=y)
{
father[x]=y;
num=c;
}
return num;
}
int main()
{
struct in s[maxn];
int N;
int a,b,c;
while(scanf("%d",&N),N)
{
for(int i=1;i<=N*(N-1)/2;i++)
father[i]=i;
int sum=0;
for(int i=0;i
scanf("%d%d%d",&s[i].start,&s[i].end,&s[i].value);
}
sort(s,s+N*(N-1)/2,cmp);
for(int i=0;i
a=s[i].start;
b=s[i].end;
c=s[i].value;
// sum+= Union(a,b,c);
int x=find(a);int y=find(b);
// printf("a=%d b=%d\n",x,y);
if(x!=y) { father[x]=y;sum+=c;}
}
printf("%d\n",sum);
}
return 0;
}