{"id":1179,"date":"2015-07-17T12:16:14","date_gmt":"2015-07-17T04:16:14","guid":{"rendered":"http:\/\/www.shuizilong.com\/house\/?p=1179"},"modified":"2015-07-17T12:18:38","modified_gmt":"2015-07-17T04:18:38","slug":"bzoj-1565-noi2009%e6%a4%8d%e7%89%a9%e5%a4%a7%e6%88%98%e5%83%b5%e5%b0%b8","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/bzoj-1565-noi2009%e6%a4%8d%e7%89%a9%e5%a4%a7%e6%88%98%e5%83%b5%e5%b0%b8\/","title":{"rendered":"BZOJ 1565. [NOI2009]\u690d\u7269\u5927\u6218\u50f5\u5c38"},"content":{"rendered":"<p><!--more--><br \/>\nhttp:\/\/www.lydsy.com\/JudgeOnline\/problem.php?id=1565<br \/>\nhttps:\/\/www.byvoid.com\/blog\/noi-2009-pvz<\/p>\n<p>\u62d3\u6251\u6392\u5e8f \uff0b \u6700\u5927\u6743\u95ed\u5408\u5b50\u56fe\u3002<\/p>\n<pre class=\"brush: cpp; light: false; title: ; toolbar: true; notranslate\" title=\"\">\r\n\r\nconst int N = 600 + 3, M = N * N * 4;\r\n\r\n\r\nstruct Network_Flow{\r\n    \r\n    int D&#x5B;N], hd&#x5B;N], suc&#x5B;M], to&#x5B;M], cap&#x5B;M];\r\n    int n, m, s, t;\r\n    \r\n    inline 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\n    inline 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\n    LL 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    \r\n    void init(int _n){\r\n        n = _n; s = 0, t = n + 1; m = 2; n = t + 1;\r\n        fill(hd, hd+n, 0);\r\n    }\r\n    \r\n} G;\r\n#undef v\r\n#undef c\r\n#undef f\r\n\r\n\r\nVI _adj&#x5B;N], adj&#x5B;N]; int inD&#x5B;N], scr&#x5B;N], h&#x5B;N], q&#x5B;N] = {M}, op, cz, u, v;\r\nint r, c, s, t, n, m, ans;\r\n\r\ninline void add_edge(int x, int y){\r\n    ++inD&#x5B;y], _adj&#x5B;x].PB(y);\r\n}\r\n\r\ninline int id(int x, int y){\r\n    return x * c + y + 1;\r\n}\r\n\r\n\r\n\r\n#define v _adj&#x5B;u]&#x5B;i]\r\nvoid init(){\r\n    RD(r, c);\r\n    \r\n    REP(i, r) REP(j, c){\r\n        if (j != 0) add_edge(id(i, j), id(i, j-1));\r\n        int t, x, y; RDD(scr&#x5B;id(i, j)]);\r\n        Rush RD(x, y), add_edge(id(i, j), id(x, y));\r\n    }\r\n    \r\n    n = r * c;\r\n    \r\n    \/\/ Toposort ..\r\n    \r\n    op = 0;\r\n    REP_1(i, n) if (!inD&#x5B;i])\r\n        q&#x5B;++op] = i;\r\n    \r\n    while (op){\r\n        u = q&#x5B;op--];\r\n        REP(i, SZ(_adj&#x5B;u])){\r\n            --inD&#x5B;v];\r\n            if (!inD&#x5B;v])\r\n                q&#x5B;++op] = v;\r\n        }\r\n    }\r\n    \r\n    \/\/ Graph Initializing..\r\n    \r\n    \r\n    G.init(n);\r\n    \r\n    REP_1(u, n) if (!inD&#x5B;u]){\r\n        \r\n        if (scr&#x5B;u] &gt; 0){\r\n            G.ae(G.s, u, scr&#x5B;u]);\r\n            ans += scr&#x5B;u];\r\n        }\r\n        else\r\n            G.ae(u, G.t, -scr&#x5B;u]);\r\n        \r\n        REP(i, SZ(_adj&#x5B;u])){\r\n            if (!inD&#x5B;v]) G.ae(v, u, INF);\r\n        }\r\n    }\r\n    \r\n}\r\n#undef v\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#endif\r\n    \r\n    init();\r\n    printf(&quot;%d\\n&quot;, ans - G.sap());\r\n}\r\n\r\n\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":[22],"tags":[],"class_list":["post-1179","post","type-post","status-publish","format-standard","hentry","category-bzoj"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-j1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1179","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=1179"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1179\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=1179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=1179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=1179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}