样例输出1求调
查看原帖
样例输出1求调
1016866
dlzlj_2010楼主2024/5/21 12:39

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=505,M=8005;
const int inf=numeric_limits<int>::max();
bool vis[N];
int dis[N];
int a[N];
int n,m,f;
struct node{
	int v,w;
};
vector<node>e[N]; 
void Dijkstra(int s){
	memset(vis,0,sizeof vis);
	memset(dis,0x3f,sizeof dis);
	priority_queue<pii>q;
	q.push({0,s});vis[s]=1;dis[s]=0;
	while(!q.empty()){
		pii t=q.top();q.pop();
		int u=t.second;
		if(vis[u])continue;
		vis[u]=1;
		for(auto edge:e[u]){
			int v=edge.v,w=edge.w;
			if(dis[v]>dis[u]+w)dis[v]=dis[u]+w,q.push({-dis[v],v});
		}
	}
}
signed main(){
	cin>>n>>f>>m;
	for(int i=1;i<=f;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		e[u].push_back({v,w});
		e[v].push_back({u,w});
	}
	int minn=inf,ans=0;
	
	for(int i=1;i<=n;i++){
		Dijkstra(i);
		int sum=0;
		for(int j=1;j<=f;j++){
			sum+=dis[a[i]];
		}
		if(sum<minn)minn=sum,ans=i;
	}
	cout<<ans;
	return 0;
}
2024/5/21 12:39
加载中...