求助,dijkstra,2A8W
查看原帖
求助,dijkstra,2A8W
473188
NaHCO3_tht楼主2022/2/26 10:54
#include<bits/stdc++.h>
#define to first
#define weight second
using namespace std;
const int maxn = 805;
int n,p,c;
int a[505],dis[805],ans = 0x3f3f3f3f;
bool vis[805];
vector< pair<int,int> >g[maxn];
void dj(int s){
	memset(dis,0x3f3f3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	priority_queue< pair<int,int> > q;
	dis[s] = 0;
	q.push(make_pair(s,0));
	while(!q.empty()){
		pair<int,int> x = q.top();
		q.pop();
		if(vis[x.to])
			continue;
		vis[x.to] = 1;
		for(int i = 0;i < g[x.to].size();i++){
			int v = g[x.to][i].to,w = g[x.to][i].weight;
			if(dis[v] > dis[x.to]+w){
				dis[v] = dis[x.to]+w;
				q.push(make_pair(v,-dis[v]));
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>p>>c;
	for(int i = 1;i <= n;i++){
		cin>>a[i];
	}
	for(int i = 1;i <= c;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back(make_pair(v,w));
		g[v].push_back(make_pair(u,w));
	}
	for(int i = 1;i <= p;i++){
		dj(i);
		int sum = 0;
		for(int j = 1;j <= n;j++){
			sum += dis[a[j]];
		}
		ans = min(ans,sum);
	}
	cout<<ans;
	return 0;
}
2022/2/26 10:54
加载中...