#include<bits/stdc++.h>
using namespace std;
#define MXN 110
#define MXM 5050
struct T{
int x,y,c;
}t[MXM];
int f[MXN],n,m,ans;
bool cmp (T t1,T t2)
{
return t1.c<t2.c;
}
int find(int r)
{
if(r!=f[r]) f[r] = find(f[r]);
return f[r];
}
void merge (T &t)
{
int t1 = find(t.x);
int t2 = find(t.y);
if(t1!=t2)
{
f[t1] = t2;
ans+=t.c;
}
}
int main ()
{
int a,i;
while(scanf("%d%d",&n,&m),n)
{
for(i = 1;i<=n;i++)
scanf("%d%d%d",&t[i].x,&t[i].y,&t[i].c);
sort(t+1,t+n+1,cmp);
for(i = 1;i<=m;i++) f[i] = i;
ans = 0;
for(i = 1;i<=n;i++) merge(t[i]);
a = 0;
for(i = 1;i<=m;i++)
if(f[i]==i) a++;
if(a==1)
printf("%d\n",ans);
else
printf("?\n");
}
return 0;
}
hdu 1863 畅通工程
最新推荐文章于 2021-09-22 16:20:38 发布