直接贴代码
#include<stdio.h>
#include<algorithm>
using namespace std;
int bin[5005];
struct In
{
int p1,p2;
int v;
}s[5005];
bool compare(In a,In b)
{
return a.v<b.v;
}
int findx(int x)
{
int r=x;
if(bin[r]!=r) bin[r]=findx(bin[r]);
return bin[r];
}
int merge(int a,int b)
{
int fx,fy;
fx=findx(a);
fy=findx(b);
if(fx==fy) return 0;
else {
if(fx>fy) bin[fx]=bin[fy];
else bin[fy]=fx;
return 1;
}
}
int main()
{
int i,n,m,sum,count;
while(scanf("%d%d",&n,&m),n)
{
sum=0;
count=0;
for(i=1;i<=m;i++) bin[i]=i;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&s[i].p1,&s[i].p2,&s[i].v);
}
sort(s,s+n,compare);
for(i=0;i<n;i++)
{
if(merge(s[i].p1,s[i].p2)) {
sum+=s[i].v;
count++;
}
}
if(count==m-1) printf("%d\n",sum);
else printf("?\n");
}
}