• Source
    1. #include <cstdio>
    2. #include <cstring>
    3. #include <algorithm>
    4. #include <queue>
    5. // by zrt
    6. // problem:uva10806
    7. // 无论你在什么时候开始,重要的是开始以后就不要停止。
    8. using namespace std ;
    9. typedef long long LL ;
    10. const double eps(1e-10) ;
    11. const int inf(0x3f3f3f3f) ;
    12. int H[105],X[40005],P[40005],from[40005],flow[40005],cost[40005],tot;
    13. inline void add(int x,int y,int z,int k){
    14. P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=z;from[tot]=x;cost[tot]=k;
    15. }
    16. int f,c;
    17. int n,m;
    18. int S,T;
    19. int d[105],a[105],p[105];
    20. struct N{
    21. int x,w;
    22. friend bool operator < (N a,N b){
    23. return a.w>b.w;
    24. }
    25. N(int a=0,int b=0){
    26. x=a,w=b;
    27. }
    28. };
    29. priority_queue<N> q;
    30. bool spfa(){
    31. memset(d,0x3f,sizeof d);
    32. d[S]=0;a[S]=inf;p[S]=0;int x;
    33. q.push(N(S,0));
    34. while(!q.empty()){
    35. x=q.top().x;q.pop();
    36. if(x==T) continue;
    37. for(int i=H[x];i;i=X[i]){
    38. if(flow[i]>0&&d[P[i]]>d[x]+cost[i]){
    39. d[P[i]]=d[x]+cost[i];
    40. a[P[i]]=min(a[x],flow[i]);
    41. p[P[i]]=i;
    42. q.push(N(P[i],d[P[i]]));
    43. }
    44. }
    45. while(!q.empty()&&d[q.top().x]!=q.top().w) q.pop();
    46. }
    47. if(d[T]==inf) return 0;
    48. f+=a[T];
    49. c+=a[T]*d[T];
    50. x=T;
    51. while(x!=S){
    52. flow[p[x]]-=a[T];
    53. flow[p[x]^1]+=a[T];
    54. x=from[p[x]];
    55. }
    56. return 1;
    57. }
    58. int main(){
    59. #ifdef LOCAL
    60. freopen("in.txt","r",stdin) ;
    61. freopen("out.txt","w",stdout) ;
    62. #endif
    63. while(scanf("%d",&n)&&n){
    64. scanf("%d",&m);
    65. memset(H,0,sizeof H);f=c=0;tot=1;S=0,T=n;
    66. add(S,1,2,0);add(1,S,0,0);
    67. for(int i=0,x,y,z;i<m;i++){
    68. scanf("%d%d%d",&x,&y,&z);
    69. add(x,y,1,z);add(y,x,0,-z);
    70. add(y,x,1,z);add(x,y,0,-z);
    71. }
    72. while(spfa());
    73. if(f==2){
    74. printf("%d\n",c);
    75. }else{
    76. puts("Back to jail");
    77. }
    78. }
    79.  
    80. return 0 ;
    81. }
    82.