使用 Dijkstra 堆优化全部 WA
查看原帖
使用 Dijkstra 堆优化全部 WA
1259751
ysxb1234楼主2024/12/21 11:14
#include <bits/stdc++.h>
#define INF 0x7fffffff
using namespace std;
int n,p,c,dis[1500],a[1500],ans=INF;
bool b[1500];
struct node{
	int to,w;
}_p;
vector <node> e[1500];

int main()
{
	int sum=0;
	cin>>n>>p>>c;
	for(int i=1;i<=n;i++)	{int in; cin>>in; a[in]++;}
	for(int i=1;i<=c;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		_p.to=v;_p.w=w;
		e[u].push_back(_p);
		_p.to=u;_p.w=w;
		e[v].push_back(_p);
	}
	for(int i=1;i<=p;i++)
	{
		memset(b,false,sizeof b);
		for(int i=1;i<=n;i++)
			dis[i]=INF;
		dis[i]=0;
		priority_queue < pair<int,int> > q;
		q.push(make_pair(0,i));
		while(q.size())
		{
			int k=-q.top().first,u=q.top().second;
			q.pop();
			if(b[u])	continue;
			b[u]=true;
			for(auto v:e[u])
				if(dis[v.to]>k+v.w)
				{
					dis[v.to]=k+v.w;
					q.push(make_pair(-dis[v.to],v.to));
				}
		}
		sum=0;
		for(int j=1;j<=p;j++)
			sum+=dis[j]*a[j];
		ans=min(ans,sum);
	}
	cout<<ans;
	return 0;
}
2024/12/21 11:14
加载中...