比赛 20150422 评测结果 WAWWAWWAWWW
题目名称 背驮式行走 最终得分 27
用户昵称 Dijkstra 运行时间 0.566 s
代码语言 C++ 内存使用 11.16 MiB
提交时间 2015-04-22 09:26:18
显示代码纯文本
#include<fstream>
#include<queue>
#include<cstring>
#include<cmath>
#define MAXN 40001
#define INF 0x7fffffff
using namespace std;
ifstream fin("piggyback.in");
ofstream fout("piggyback.out");
int N,M,B,E,P;
int d[3][MAXN],l[MAXN],p[3]={1,2},ans[3]={0};
queue<int>m[MAXN];
void BFS(int s)
{
	queue<int>q;bool v[MAXN];
	memset(v,0,sizeof(v));
	q.push(p[s]);v[p[s]]=1;d[s][p[s]]=0;
	while(!q.empty())
	{
		int U=q.front();
		q.pop();
		for(int i=1;i<=l[U];i++)
		{
			int V=m[U].front();
			m[U].pop();m[U].push(V);
			if(v[V]) continue;
			q.push(V);v[V]=1;
			d[s][V]=d[s][U]+1;
		}
	}
}
void INPUT()
{
	memset(l,0,sizeof(l));
	fin>>B>>E>>P>>N>>M;
	int u,v;
	for(int i=1;i<=M;i++)
	{
		fin>>u>>v;
		m[u].push(v);m[v].push(u);
		l[u]++;l[v]++;
	}
	p[2]=N;
}
void WORK()
{
	int bm,em,pm=INF;
	for(int i=0;i<3;i++) BFS(i);
	bm=d[0][N]*B;em=d[1][N]*E;
    for(int i=1;i<=N;i++) pm=min(pm,d[0][i]*B+d[1][i]*E+d[2][i]*P);
	bm=min(bm,em);bm=min(bm,pm);
	fout<<bm<<endl;
}
int main()
{
	INPUT();
	WORK();
	return 0;
}