比赛 |
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;
}