#include <stdio.h> typedef struct Egel { int to; int from; int weight; int build; }Egel; int getRoot(int root[],int v) { int r=v; while(r!=root[r]) { r=root[r]; } return r; } int sort(Egel egels[],int n) { for(int i=0;i<n*(n-1)/2;i++) { int k=i; for(int j=i+1;j<n*(n-1)/2;j++) { if(egels[j].build==1&&egels[k].build==0) { k=j; } else if(egels[j].weight<egels[k].weight &&egels[j].build==0 &&egels[k].build==0) { k=j; } } if(k!=i) { int temp1=egels[i].to; int temp2=egels[i].from; int temp3=egels[i].weight; int temp4=egels[i].build; egels[i].to=egels[k].to; egels[i].from=egels[k].from; egels[i].weight=egels[k].weight; egels[i].build=egels[k].build; egels[k].to=temp1; egels[k].from=temp2; egels[k].weight=temp3; egels[k].build=temp4; } } } int getValues(Egel egels[],int n) { int root[100]; for(int i=0;i<100;i++) { root[i]=i; } int sum=0; for(int i=0;i<n*(n-1)/2;i++) { int a=getRoot(root,egels[i].to); int b=getRoot(root,egels[i].from); if(a!=b) { if(egels[i].build==0) { sum=sum+egels[i].weight; } root[a]=b; } } printf("%d\n",sum); } int main() { while(1) { int N; scanf("%d",&N); if(N==0) { break; } Egel egels[10000]; for(int i=0;i<N*(N-1)/2;i++) { scanf("%d%d",&egels[i].to,&egels[i].from); scanf("%d%d",&egels[i].weight,&egels[i].build); } sort(egels,N); getValues(egels,N); } } /************************************************************** Problem: 2205 User: admin Language: C Result: Accepted Time:86 ms Memory:1180 kb ****************************************************************/