//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;   }}