HDU 1863

来源:互联网 发布:广发华福软件 编辑:程序博客网 时间:2024/04/30 12:13
#include<iostream>using namespace std;#define N 9999999int map[101][101];int mark[101];bool visited[101];int n,m;void prim(){int i,j,k,sum=0,min;int flag=1;memset(mark,0,sizeof(mark));memset(visited,0,sizeof(visited));k=1;visited[1]=1;for(i=2;i<=n;i++)mark[i]=map[k][i];min=N;for(i=1;i<=n-1;i++){for(j=1;j<=n;j++)if(mark[j]<min && !visited[j]){min=mark[j];k=j;}if(min==N){flag=0;break;}visited[k]=1;for(j=1;j<=n;j++){if(mark[j]>map[k][j]&&!visited[j])mark[j]=map[k][j];}sum+=min;min=N;}if(flag)printf("%d\n",sum);elseprintf("?\n");}int main(){int i,j;int a,b,s;while(cin>>m>>n){if(m==0)break;for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i==j)map[i][j]=0;elsemap[i][j]=N;}for(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&s);map[a][b]=s;map[b][a]=s;}prim();}return 0;}

原创粉丝点击