求助,Dijkstra超时2,9,10测试点
查看原帖
求助,Dijkstra超时2,9,10测试点
389398
SBsimon楼主2021/6/2 12:19
#include<bits/stdc++.h>
using namespace std;
int cow[820];
int w[820][820];
int dis[820],pre[820];
int f[820];
int max_=100000000;
int clean(int n){
	for(int l=0;l<=n;++l)
	{
		dis[l]=max_;
		pre[l]=0;
		f[l]=0;
	}
}
int dij(int n,int x){
	clean(n);
	f[0]=1;
	dis[x]=0;
	pre[x]=0;
	for(int i=1;i<=n;++i)
	{
		int q=0;
		for(int j=1;j<=n;++j)
			if(f[j]==0&&dis[j]<dis[q])
				q=j;
		f[q]=1;
		if(q==0)
			break;
		for(int j=1;j<=n;++j)
			if(dis[j]>dis[q]+w[q][j]&&w[q][j]!=0)
			{
				dis[j]=dis[q]+w[q][j];
				pre[j]=q;
			}
	}
}
int main(){
	int n_cow,n,m;
	cin>>n_cow>>n>>m;
	for(int i=1;i<=n_cow;++i)
		cin>>cow[i];
	for(int i=1;i<=m;++i)
	{
		int x,y,l;
		cin>>x>>y>>l;
		w[x][y]=l;
		w[y][x]=l;
	}
	int minn=max_;
	for(int i=1;i<=n;++i)
	{
		int s=0;
		dij(n,i);
		for(int j=1;j<=n_cow;++j)
			s=s+dis[cow[j]];
		minn=min(minn,s);
	}
	cout<<minn;	
	return 0;
}
2021/6/2 12:19
加载中...