//hdu 1863 prim简单
来源:互联网 发布:tomcat 域名访问 编辑:程序博客网 时间:2024/06/16 18:12
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;int N,M;bool s[110];int ans;int flag;int map[110][110];void prim(int u){ memset(s,0,sizeof(s)); s[u]=1; int lowcost[110]; for(int i=1;i<=M;i++) if(i!=u) { lowcost[i]=map[u][i]; } for(int i=1;i<=M;i++) { int tmp=1000000; int t=u; for(int j=1;j<=M;j++) if(!s[j]&&lowcost[j]<tmp) { tmp=lowcost[j]; t=j; } if(t==u) break; s[t]=1; ans+=lowcost[t]; for(int k=1;k<=M;k++) if(!s[k]&&lowcost[k]>map[t][k]) { lowcost[k]=map[t][k]; } } for(int i=1;i<=M;i++) if(s[i]==0) { flag=1; break; }}int main(){ while(cin>>N>>M,N){ ans=0; flag=0; memset(map,1000000,sizeof(map)); for(int i=0;i<N;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c; } prim(1); if(!flag) cout<<ans<<endl; else cout<<'?'<<endl; }}