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