Advertising:
#include <stdio.h>int main(){ puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/43970835");}
Exercises
BFS 1, 2, n to each point distance
Then enumerate Min{b*f[1]+e*f[2]+p*f[n]};
Code:
#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 50000#define INF 0X3F3F3F3F3F3F3F3FLLusing namespace STD;structksd{intV,next;} e[n<<1];inthead[n],cnt;inline voidAddintUintV) {e[++cnt].v=v; E[cnt].next=head[u]; head[u]=cnt;}intf[n][3]; Queue<int>QvoidBFsintSintP) {Q.push (s), f[s][p]=0;intI,u,v; while(!q.empty ()) {U=q.front (), Q.pop (); for(I=head[u];i;i=e[i].next) {if(f[v=e[i].v][p]==-1) {f[v][p]=f[u][p]+1; Q.push (v); } } }return;}Long LongA,b,c,n,m;intMain () {Freopen ("Test.in","R", stdin);memset(f,-1,sizeoff);intI,j,k;intA,b,c;Cin>>A>>B>>C>>n>>m; while(m--) {Cin>>a>>b; Add (A, B), add (B,a); } BFS (1,0), BFS (2,1), BFS (N,2);Long LongAns=inf; for(i=1; i<=n;i++) Ans=min (ans,a*f[i][0]+b*f[i][1]+c*f[i][2]);cout<<ans<<endl;return 0;}
"BZOJ3891" "Usaco2014 Dec" piggy back bfs+ motion rules?