比赛 |
20150422 |
评测结果 |
AAAAATTAAAA |
题目名称 |
背驮式行走 |
最终得分 |
81 |
用户昵称 |
wolf. |
运行时间 |
3.000 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2015-04-22 09:10:00 |
显示代码纯文本
#include<iostream>
#include<fstream>
#include<vector>
#include<map>
#include<algorithm>
#include<queue>
using namespace std;
ifstream fin("piggyback.in");
ofstream fout("piggyback.out");
const long long IMAX=9999999999999ll;
long long B,E,P,N;
vector<vector<int> > TT;
vector<long long> dis;//最短时间
vector<long long> AA;//A到该点的最短时间
vector<long long> BB;//B到该点的最短距离
long long core(){
dis.resize(N+2,IMAX);
AA=dis;BB=dis;
queue<int> Q;
Q.push(1);
Q.push(2);
AA[1]=0;
BB[2]=0;
while(!Q.empty()){
int p=Q.front();
Q.pop();
bool fall=0;
for(int i=0;i!=TT[p].size();++i){
fall=0;
if(AA[TT[p][i]]>AA[p]+B){
AA[TT[p][i]]=AA[p]+B;
fall=1;
}
if(BB[TT[p][i]]>BB[p]+E){
BB[TT[p][i]]=BB[p]+E;
fall=1;
}
if(dis[TT[p][i]]>AA[p]+BB[p]+P||dis[TT[p][i]]>dis[p]+P){
dis[TT[p][i]]=min(AA[p]+BB[p]+P,dis[p]+P);
fall=1;
}
if(fall){
Q.push(TT[p][i]);
}
}
}
return min(dis[N],AA[N]+BB[N]);
}
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;
//cout<<a<<" "<<b<<endl;
TT[a].push_back(b);
TT[b].push_back(a);
}
/*for(int i=0;i!=TT.size();++i){
cout<<i<<":";
for(int j=0;j!=TT[i].size();++j){
cout<<TT[i][j]<<" ";
}
cout<<endl;
}*/
fout<<core()<<endl;
/*for(int i=0;i!=N+1;++i){
cout<<AA[i]<<" ";
}
cout<<endl;
for(int i=0;i!=N+1;++i){
cout<<BB[i]<<" ";
}
cout<<endl;
for(int i=0;i!=N+1;++i){
cout<<dis[i]<<" ";
}
cout<<endl;*/
return 0;
}
//designed by wolf