比赛 20150422 评测结果 AAAAAAAAAAA
题目名称 背驮式行走 最终得分 100
用户昵称 清羽 运行时间 0.091 s
代码语言 C++ 内存使用 1.23 MiB
提交时间 2015-04-22 08:55:06
显示代码纯文本
//by tsingyawn
//注意:本题下标从零开始
#include<cstdio>
#include<iostream>
#include<cstring>
#include<ctime>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

const int maxn=40000;
const int INF=2147483647;

vector<int> G[maxn];
int p,n,m,w[3],d[3][maxn];

void get_dist(int s,int id)
{
	for(int i=0;i<n;i++) d[id][i]=INF;
	d[id][s]=0;
	queue<int> q;
	q.push(s);

	while(!q.empty()){
		int u=q.front(); q.pop();
		for(int i=0;i<G[u].size();i++){
			int v=G[u][i];
			if(d[id][v]==INF){
				d[id][v]=d[id][u]+w[id];
				q.push(v);
			}
		}
	}
}

void init()
{
	scanf("%d%d%d%d%d",&w[0],&w[1],&w[2],&n,&m);
	for(int i=0;i<m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		x--;y--;
		G[x].push_back(y);
		G[y].push_back(x);
	}
	get_dist(0,0);
	get_dist(1,1);
	get_dist(n-1,2);
}

void work()
{
	int ans=INF;
	for(int i=0;i<n;i++) ans=min(ans,d[0][i]+d[1][i]+d[2][i]);
	printf("%d\n",ans);
}

int main()
{
	freopen("piggyback.in","r",stdin);
	freopen("piggyback.out","w",stdout);
	init();
	work();
	fclose(stdin);
	fclose(stdout);
	return 0;
}