求dalao帮助,对了bi guan 香甜的黄油 Sweet Butter
查看原帖
求dalao帮助,对了bi guan 香甜的黄油 Sweet Butter
1531031
songyuteng楼主2025/1/6 16:29
#include<bits/stdc++.h>
using namespace std;
int dist[810],pos[510];
int pre[810],h[3000],nxt[3000],w[3000],idx,ans=INT_MAX;
bool vis[810];
int n,p,c;
typedef pair<int,int> PII;
priority_queue<PII,vector<PII>,greater<PII>> q;
void add(int x,int y,int z) {
	h[++idx]=y;
	nxt[idx]=pre[x];
	w[idx]=z;
	pre[x]=idx;
}
void dij(int x) {
	dist[x]=0;
	q.push({0,x});
	while(!q.empty()){
	    PII tt=q.top();q.pop();
		int k=tt.second;
		if(vis[k]) continue;
		vis[k]=1;
		vis[k]=1;
		for(int j=pre[k]; j; j=nxt[j]) {
			int to=h[j];
			if(dist[to]>dist[k]+w[j]){
				dist[to]=dist[k]+w[j];
				q.push({dist[to],to});
			}
		}
	}
}
int main() {
	cin>>n>>p>>c;
	for(int i=1; i<=n; i++) {
		cin>>pos[i];
	}
	int x,y,z;
	for(int i=1; i<=c; i++) {
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
	}
	for(int i=1; i<=p; i++) {
		memset(vis,0,sizeof vis);
		memset(dist,0x3f,sizeof dist);
		dij(i);
		int sum=0;
		for(int j=1; j<=n; j++) {
			sum+=dist[pos[j]];
		}
		ans=min(ans,sum);
	}
	cout<<ans;
	return 0;
}
2025/1/6 16:29
加载中...