记录编号 159680 评测结果 AAAAAAAAAAA
题目名称 背驮式行走 最终得分 100
用户昵称 Gravatarwolf. 是否通过 通过
代码语言 C++ 运行时间 0.081 s
提交时间 2015-04-22 13:48:38 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<vector>
#include<map>
#include<algorithm>
#include<queue>
using namespace std;
ifstream fin("piggyback.in");
ofstream fout("piggyback.out");
const int IMAX=99999999;
int B,E,P,N;
vector<vector<int> > TT;
vector<long long> dis;//最短时间
vector<long long> AA;//A到该点的最短时间
vector<long long> BB;//B到该点的最短距离
vector<bool> flag;
void core1(){
	queue<int> Q;
	Q.push(1);
	AA.resize(N+2,IMAX);
	AA[1]=0;
	flag.clear();
	flag.resize(N+2,0);
	flag[1]=1;
	while(!Q.empty()){
		int it=Q.front();
		Q.pop();
		flag[it]=0;
		for(int i=0;i!=TT[it].size();++i){
			if(AA[TT[it][i]]>AA[it]+B){
				AA[TT[it][i]]=AA[it]+B;
				if(flag[TT[it][i]]==0){
					flag[TT[it][i]]=1;
					Q.push(TT[it][i]);
				}
			}
		}
	}
}
void core2(){
	queue<int> Q;
	Q.push(2);
	BB.resize(N+2,IMAX);
	BB[2]=0;
	flag.clear();
	flag.resize(N+2,0);
	flag[2]=1;
	while(!Q.empty()){
		int it=Q.front();
		Q.pop();
		flag[it]=0;
		for(int i=0;i!=TT[it].size();++i){
			if(BB[TT[it][i]]>BB[it]+E){
				BB[TT[it][i]]=BB[it]+E;
				if(flag[TT[it][i]]==0){
					flag[TT[it][i]]=1;
					Q.push(TT[it][i]);
				}
			}
		}
	}

}
long long core3(){
	queue<int> Q;
	Q.push(N);
	flag.clear();
	flag.resize(N+3,0);
	flag[N]=1;
	dis.resize(N+2,IMAX);
	dis[N]=0;
	while(!Q.empty()){
		int it=Q.front();
		Q.pop();
		flag[it]=0;
		for(int i=0;i!=TT[it].size();++i){
			if(dis[TT[it][i]]>=dis[it]+P){
				dis[TT[it][i]]=dis[it]+P;
				if(flag[TT[it][i]]==0){
					flag[TT[it][i]]=1;
					Q.push(TT[it][i]);
				}
			}
		}
	}
	long long mmin=IMAX;
	for(int i=0;i!=dis.size();++i){
		mmin=min(mmin,dis[i]+AA[i]+BB[i]);
	}
	return mmin;
}
int main(){
	int m;
	fin>>B>>E>>P>>N>>m;
	TT.resize(N+2);
	for(int i=0;i!=m;++i){
		int a,b;
		fin>>a>>b;
		TT[a].push_back(b);
		TT[b].push_back(a);
	}
	core1();core2();
	fout<<core3()<<endl;
	return 0;
}
//designed by wolf