比赛 |
20150422 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
背驮式行走 |
最终得分 |
100 |
用户昵称 |
mikumikumi |
运行时间 |
1.191 s |
代码语言 |
C++ |
内存使用 |
20.31 MiB |
提交时间 |
2015-04-22 09:26:04 |
显示代码纯文本
#include<cstdio>
#include<deque>
#include<iostream>
using namespace std;
typedef long long LL;
int b,e,p,n,m;
int maxn=0xffffff;
LL sw[3][40001],ans=maxn;
class miku
{
public:
int to;
int lo;
};
deque<miku> bj[3][40001];
int in(int a,int q,int s,int i)
{
miku x;
x.to=q;x.lo=s;
bj[i][a].push_back(x);
x.to=a;
bj[i][q].push_back(x);
return 0;
}
int spfa(int x,int v)
{
deque<int> q;
int iq[40001]={0};
q.push_back(x);
iq[x]=1;
sw[v][x]=0;
while(!q.empty())
{
int w=q.front();
q.pop_front();
iq[w]=0;
for(int j=0;j<bj[v][w].size();j++)
{
miku z=bj[v][w][j];
if(z.lo+sw[v][w]<sw[v][z.to])
{
sw[v][z.to]=z.lo+sw[v][w];
if(iq[z.to]==0)
{
iq[z.to]=1;
q.push_back(z.to);
}
}
}
}
return 0;
}
int main()
{
freopen("piggyback.in","r",stdin);
freopen("piggyback.out","w",stdout);
scanf("%d%d%d%d%d",&b,&e,&p,&n,&m);
for(int i=1;i<=m;i++)
{
int a,c;
scanf("%d%d",&a,&c);
in(a,c,b,0);
in(a,c,e,1);
in(a,c,p,2);
}
for(int i=0;i<=2;i++)
{
for(int j=1;j<=n;j++)
sw[i][j]=maxn;
}
spfa(1,0);
spfa(2,1);
spfa(n,2);
for(int i=1;i<=n;i++)
{
LL r=sw[0][i]+sw[1][i]+sw[2][i];
if(r<ans)
ans=r;
}
cout<<ans<<endl;
/*for(int i=0;i<=2;i++)
{
for(int j=1;j<=n;j++)
{
cout<<sw[i][j]<<" ";
}
cout<<endl;
}*/
return 0;
}