{"id":1180,"date":"2015-07-17T12:41:38","date_gmt":"2015-07-17T04:41:38","guid":{"rendered":"http:\/\/www.shuizilong.com\/house\/?p=1180"},"modified":"2015-07-25T23:29:03","modified_gmt":"2015-07-25T15:29:03","slug":"spoj-fastflow-fast-maximum-flow","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/spoj-fastflow-fast-maximum-flow\/","title":{"rendered":"SPOJ FASTFLOW. Fast Maximum Flow"},"content":{"rendered":"<p><!--more--><br \/>\n<a href=\"http:\/\/www.spoj.com\/problems\/FASTFLOW\/en\/\">http:\/\/www.spoj.com\/problems\/FASTFLOW\/en\/<\/a><\/p>\n<p>\u7f51\u7edc\u6d41\u6a21\u677f\u9898\u3002<\/p>\n<pre class=\"brush: cpp; collapse: true; light: false; title: Sap; toolbar: true; notranslate\" title=\"Sap\">\r\n\r\nconst int N = 5009, M = 2 * 30009;\r\n\r\n\/\/struct Network_Flow{\r\n\r\nint D&#x5B;N], hd&#x5B;N], suc&#x5B;M], to&#x5B;M], cap&#x5B;M];\r\nint n, m, s, t;\r\n\r\ninline void ae(int x, int y, int c){\r\n    suc&#x5B;m] = hd&#x5B;x], hd&#x5B;x] = m, to&#x5B;m] = y, cap&#x5B;m++] = c,\r\n    suc&#x5B;m] = hd&#x5B;y], hd&#x5B;y] = m, to&#x5B;m] = x, cap&#x5B;m++] = 0;\r\n}\r\n\r\ninline void aee(int x, int y, int c){\r\n    suc&#x5B;m] = hd&#x5B;x], hd&#x5B;x] = m, to&#x5B;m] = y, cap&#x5B;m++] = c,\r\n    suc&#x5B;m] = hd&#x5B;y], hd&#x5B;y] = m, to&#x5B;m] = x, cap&#x5B;m++] = c;\r\n}\r\n\r\n#define v to&#x5B;i]\r\n#define c cap&#x5B;i]\r\n#define f cap&#x5B;i^1]\r\n\r\nLL sap(){\r\n    LL z=0; static int cnt&#x5B;N],cur&#x5B;N],pre&#x5B;N];\r\n    fill(D,D+n,n),fill(cnt,cnt+n,0);cnt&#x5B;n]=n;\r\n    int u=s;cur&#x5B;s]=hd&#x5B;s];while (D&#x5B;s]){\r\n#define i cur&#x5B;u]\r\n        if (u==t){\r\n            int d=INF;for(u=s;u!=t;u=v)checkMin(d,c);\r\n            z+=d;for(u=s;u!=t;u=v)f+=d,c-=d;u=s;\r\n        }\r\n#undef i\r\n        int i;for(i=cur&#x5B;u];i;i=suc&#x5B;i]){\r\n            if(D&#x5B;u]+1==D&#x5B;v]&amp;&amp;c){cur&#x5B;u]=i,cur&#x5B;v]=hd&#x5B;v],pre&#x5B;v]=u,u=v;break;}\r\n        }\r\n        if (!i){\r\n            if (!--cnt&#x5B;D&#x5B;u]])break;\r\n            D&#x5B;u]=1;REP_G(i,u)if(c)checkMax(D&#x5B;u],D&#x5B;v]);--D&#x5B;u];\r\n            ++cnt&#x5B;D&#x5B;u]];if(u==s)cur&#x5B;u]=hd&#x5B;u];else u=pre&#x5B;u];\r\n        }\r\n    }\r\n    \r\n    return z;\r\n}\r\n#undef f\r\n#undef c\r\n#undef v\r\n\/\/} G;\r\n\r\n\r\nvoid init(){\r\n    RD(n), m = 2; s = 1, t = n++;\r\n    fill(hd, hd+n, 0);\r\n    \r\n    Rush{\r\n        int x, y; RD(x, y);\r\n        aee(x, y, RD());\r\n    }\r\n}\r\n\r\nint main(){\r\n    \r\n#ifndef ONLINE_JUDGE\r\n    freopen(&quot;\/users\/xiaodao\/desktop\/Exercise\/in.txt&quot;, &quot;r&quot;, stdin);\r\n    \/\/freopen(&quot;\/users\/xiaodao\/desktop\/Exercise\/out.txt&quot;, &quot;w&quot;, stdout);\r\n    \r\n#endif\r\n    \r\n    init(); OT(sap());\r\n}\r\n<\/pre>\n<pre class=\"brush: cpp; collapse: true; light: false; title: Dinitz; toolbar: true; notranslate\" title=\"Dinitz\">\r\n\r\nconst int N = 5009, M = 2 * 30009;\r\n\r\n\/\/struct Network_Flow{\r\n\r\nint D&#x5B;N], hd&#x5B;N], suc&#x5B;M], to&#x5B;M], cap&#x5B;M];\r\nint n, m, s, t;\r\n\r\ninline void ae(int x, int y, int c){\r\n    suc&#x5B;m] = hd&#x5B;x], hd&#x5B;x] = m, to&#x5B;m] = y, cap&#x5B;m++] = c,\r\n    suc&#x5B;m] = hd&#x5B;y], hd&#x5B;y] = m, to&#x5B;m] = x, cap&#x5B;m++] = 0;\r\n}\r\n\r\ninline void aee(int x, int y, int c){\r\n    suc&#x5B;m] = hd&#x5B;x], hd&#x5B;x] = m, to&#x5B;m] = y, cap&#x5B;m++] = c,\r\n    suc&#x5B;m] = hd&#x5B;y], hd&#x5B;y] = m, to&#x5B;m] = x, cap&#x5B;m++] = c;\r\n}\r\n\r\n#define v to&#x5B;i]\r\n#define c cap&#x5B;i]\r\n#define f cap&#x5B;i^1]\r\n\r\nbool bfs(){\r\n    static int Q&#x5B;N]; int cz = 0, op = 1;\r\n    fill(D, D+n, 0), D&#x5B;Q&#x5B;0] = s] = 1; while (cz &lt; op){\r\n        int u = Q&#x5B;cz++]; REP_G(i, u) if (!D&#x5B;v]&amp;&amp;c){\r\n            D&#x5B;Q&#x5B;op++]=v] = D&#x5B;u]+1;\r\n            if (v==t) return 1;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\n\r\nLL Dinitz(){\r\n    LL z=0; while (bfs()){\r\n        static int cur&#x5B;N], pre&#x5B;N];\r\n        int u=s;pre&#x5B;s]=-1;cur&#x5B;s]=hd&#x5B;s];while (~u){\r\n#define i cur&#x5B;u]\r\n            if (u==t){\r\n                int d=INF;for(u=s;u!=t;u=v)checkMin(d,c);\r\n                z+=d;for(u=s;u!=t;u=v)f+=d,c-=d;u=s;\r\n            }\r\n#undef i\r\n            int i;for(i=cur&#x5B;u];i;i=suc&#x5B;i])if(D&#x5B;u]+1==D&#x5B;v]&amp;&amp;c){cur&#x5B;u]=i,cur&#x5B;v]=hd&#x5B;v],pre&#x5B;v]=u,u=v;break;}\r\n            if (!i)D&#x5B;u]=0,u=pre&#x5B;u];\r\n        }\r\n    }\r\n    return z;\r\n}\r\n#undef f\r\n#undef c\r\n#undef v\r\n\/\/} G;\r\n\r\n\r\nvoid init(){\r\n    RD(n), m = 2; s = 1, t = n++;\r\n    fill(hd, hd+n, 0);\r\n    \r\n    Rush{\r\n        int x, y; RD(x, y);\r\n        aee(x, y, RD());\r\n    }\r\n}\r\n\r\nint main(){\r\n    \r\n#ifndef ONLINE_JUDGE\r\n    freopen(&quot;\/users\/xiaodao\/desktop\/Exercise\/in.txt&quot;, &quot;r&quot;, stdin);\r\n    \/\/freopen(&quot;\/users\/xiaodao\/desktop\/Exercise\/out.txt&quot;, &quot;w&quot;, stdout);\r\n    \r\n#endif\r\n    \r\n    init(); OT(Dinitz());\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[21],"tags":[],"class_list":["post-1180","post","type-post","status-publish","format-standard","hentry","category-spoj"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-j2","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/comments?post=1180"}],"version-history":[{"count":1,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1180\/revisions"}],"predecessor-version":[{"id":1181,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1180\/revisions\/1181"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=1180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=1180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=1180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}