徐梓畅 • 2年前
using namespace std; int n,path[101][101],cost[101],vis[101],u,v,r; int main(){
while(~scanf("%d",&n),n){
memset(path,-1,sizeof(path));
memset(cost,0,sizeof(cost));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++) cost[i]=INT_MAX;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j) path[i][j]=INT_MAX;
}
}
for(int i=1;i<=n*(n-1)/2;i++){
cin>>u>>v>>r;;
if(path[u][v]==0) path[u][v]=path[v][u]=r;
else path[u][v]=path[v][u]=min(path[u][v],r);
}
int sum=0;
vis[1]=1;
for(int i=1;i<=n;i++) cost[i]=path[1][i];
for(int i=1;i<=n-1;i++){
int mi=INT_MAX,pos=-1;
for(int j=1;j<=n;j++){
if(vis[j]==0&&cost[j]<mi){
mi=cost[j];
pos=j;
}
}
vis[pos]=1;
sum+=mi;
for(int j=1;j<=n;j++){
if(vis[j]==0&&cost[j]>path[pos][j]) cost[j]=path[pos][j];
}
}
cout<<sum<<endl;
}
return 0;
}
评论: