还是畅通工程

徐梓畅  •  2年前


include<bits/stdc++.h>

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;

}


评论: