AC了

噢莫加纳加加加  •  16天前


//弗洛伊德
#include<bits/stdc++.h>
using namespace std;
int n,m;
int dis[205][205];
int city[205][205];
bool imp[205];
int main(){
	cin>>n>>m;
	memset(dis,0x3f,sizeof dis);
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		dis[u][v]=min(dis[u][v],w);
		dis[v][u]=min(dis[v][u],w);
	}
	for(int i=1;i<=n;i++){		//中转点
		for(int j=1;j<=n;j++) if(j!=i){
			for(int k=1;k<=n;k++) if(i!=j&&i!=k&&j!=k){
				if(dis[j][k]>dis[j][i]+dis[i][k]){
					dis[j][k]=dis[j][i]+dis[i][k];
					city[j][k]=i;
				}else if(dis[j][k]==dis[j][i]+dis[i][k]){
					city[j][k]=0;
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) imp[city[i][j]]=true;
	bool f=false;
	for(int i=1;i<=n;i++){
		if(imp[i]){
			f=true;
			cout<<i<<' ';
		}
	}
	if(!f) cout<<"No important cities.\n";
	return 0;
}

评论:

请先登录,才能进行评论