救救孩子吧
查看原帖
救救孩子吧
1082298
Ghosty_Neutrino楼主2024/8/14 20:17
#include <bits/stdc++.h>
using namespace std;
const int N=810,M=1460;
typedef pair<int,int> PI;
priority_queue<PI,vector<PI>,greater<PI>> q;
struct D{
	int to,len,next;
}a[M*2];
int pre[N],k=0;
int d[N];
bool f[N];
int w[N],n,m,cnt,x,y,len;
int bfs(int s){
	memset(f,0,sizeof(f));
	memset(d,0x3f,sizeof(d));
	d[s]=0;
	q.push({0,s});
	while(!q.empty()){
		PI h=q.top();
		q.pop();
		int dis=h.first,p=h.second;
		if(f[p]) continue;
		f[p]=true;
		for(int i=pre[p];i;i=a[i].next){
			int to=a[i].to;
			if(dis+a[i].len<d[to]){
				d[to]=dis+a[i].len;
				q.push({d[to],to});
			}
		}
	}
	int sum=0;
	for(int i=1;i<=cnt;i++){
		sum+=d[w[i]];
	}
	return sum;
}
void add(int u,int v,int len){
	a[++k]={v,len,pre[u]};
	pre[u]=k;
}
int main(){
	scanf("%d%d%d",&cnt,&n,&m);
	for(int i=1;i<=cnt;i++){
		scanf("%d",&w[i]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&len);
		add(x,y,len);
		add(y,x,len);
	}
	int ans=INT_MAX;
	for(int i=1;i<=n;i++){
		ans=min(ans,bfs(i));
	}
	printf("%d",ans);
	return 0;
}

最后一个过不了QAQ

2024/8/14 20:17
加载中...