#include "iostream"
#include "stdio.h"
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <string.h>
#include <stack>
#include <ctype.h>
#include <functional>
#include <math.h>
using namespace std;
//1024
int t[110];
int n,m,a,b,c,size;
struct edge{
int fo,to;
int d;
bool operator < (const edge &a)const {
return d<a.d;
}
}edge[110];
int findRoot(int a){
if(t[a]==a) return a;
else{
int tmp=findRoot(t[a]);
t[a]=tmp;
return tmp;
}
}
int main(){
//freopen("input.txt","r",stdin);
while(cin>>n>>m&&n){
size=0;
for(int i=1;i<=m;i++)
t[i]=i;
while(n--){
cin>>a>>b>>c;
edge[size].fo=a; edge[size].to=b; edge[size++].d=c;
}
sort(edge,edge+size);
int ans=0;
for(int i=0;i<size;i++){
a=findRoot(edge[i].fo);
b=findRoot(edge[i].to);
if(a!=b){
t[a]=b;
ans+=edge[i].d;
}
}
int cnt=0;
for(int i=1;i<=m;i++)
if(t[i]==i) cnt++;
if(cnt>1)
cout<<"?"<<endl;
else
cout<<ans<<endl;
}
return 0;
}
/**************************************************************
Problem: 1024
User: cust123
Language: C++
Result: Accepted
Time:10 ms
Memory:1520 kb
****************************************************************/
题目1024:畅通工程
最新推荐文章于 2022-05-23 16:33:15 发布