记录编号 131258 评测结果 AAAAAAAAAA
题目名称 [USACO 3.2] 香甜的黄油 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.174 s
提交时间 2014-10-24 08:19:29 内存使用 5.22 MiB
显示代码纯文本
#include<iostream> 
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
int dx[801][801]={0},dis[801],b[801][801]={0};
int niu[801],minn=0x7fffffff;
int n,p,c;
void spfa(int);
int main()
{
	freopen("butter.in","r",stdin);
	freopen("butter.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n>>p>>c;
	for(int i=1;i<=n;i++) cin>>niu[i];
	for(int i=1;i<=c;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		dx[x][y]=dx[y][x]=z;
		b[x][++b[x][0]]=y;
		b[y][++b[y][0]]=x;
	}
	for(int i=1;i<=p;i++)
	{
		int sum=0;
		spfa(i);
		for(int j=1;j<=n;j++) sum+=dis[niu[j]];
		if(sum<minn) minn=sum;
	}
	cout<<minn;
	return 0;
}
void spfa(int x)
{
	bool f[801]={0};
	memset(dis,0x7f,sizeof(dis));
	queue<int> q;
	dis[x]=0;
	q.push(x);
	f[x]=1;
	while(!q.empty())
	{
		int k=q.front();
		for(int i=1;i<=b[k][0];i++)
		{
			if(dx[k][b[k][i]]>0 && dis[b[k][i]]>dis[k]+dx[k][b[k][i]])
			{
				dis[b[k][i]]=dis[k]+dx[k][b[k][i]];
				if(!f[b[k][i]])
				{
					q.push(b[k][i]);
					f[b[k][i]]=1;
				}
			}
		}
		f[k]=0;
		q.pop();
	}
}