记录编号 | 159694 | 评测结果 | AAAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 背驮式行走 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 1.033 s | ||
提交时间 | 2015-04-22 13:56:27 | 内存使用 | 15.12 MiB | ||
#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; }