蒟蒻抱灵求助,dijkstra
查看原帖
蒟蒻抱灵求助,dijkstra
335094
Lucifero楼主2020/7/22 17:42
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
class Edge
{
public:
	int l,r,val,nextline;
}eline[2900];
class Number
{
public:
	int v,n;
};
priority_queue<Number> r;
bool visited[1600];
int dis[1600],elast[1600],cow[1600],N,P,C,ans(INT_MAX),temp=1;
bool operator<(Number L,Number R)
{
	return L.v>R.v;
}
void heap_add(int u,int v,int w)//链式存图
{
	eline[temp].l=u;
	eline[temp].r=v;
	eline[temp].val=w;
	eline[temp].nextline=elast[eline[temp].l];
	elast[eline[temp].l]=temp++;
}
void dijkstra(int s)//讨论第i号牧场
{
	int i;
	for(i=1;i<=P;i++) dis[i]=inf;//初始化步数,赋很大初值
	dis[s]=0;//自己到自己最短路为0
	Number _now;
	_now.v=0,_now.n=s;
	r.push(_now);
	while(!r.empty())
	{
		_now=r.top();
		r.pop();
		for(i=elast[_now.n];i!=0;i=eline[i].nextline)//松弛操作
			if (dis[eline[i].r]>dis[_now.n]+eline[i].val)
			{
				dis[eline[i].r]=dis[_now.n]+eline[i].val;
				Number temp;
				temp.v=dis[eline[i].r],temp.n=eline[i].r;
				r.push(temp);
			}
	}
}
int main()
{
	//【USACO3.2.6】Sweet Butter 香甜的黄油
	int A,B,D,i,j;
	scanf("%d%d%d",&N,&P,&C);
	for(i=1;i<=N;i++)
	{
		scanf("%d",&cow[i]);
		//printf("Case %d: cow[i] = %d\n",i,cow[i]);
	}
	for(i=1;i<=C;i++)
	{
		scanf("%d%d%d",&A,&B,&D);
		heap_add(A,B,D);
		heap_add(B,A,D);
	}
	for(i=1;i<=P;i++)
	{
		dijkstra(i);
		int sum=0;
		for(j=1;j<=N;j++) sum+=dis[cow[j]];
		if (sum<ans) ans=sum;//如果比当前答案更优,则更新答案
		//printf("ans = %d,sum = %d\n",ans,sum);
	}
	printf("%d",ans);
}
2020/7/22 17:42
加载中...