{"id":1666,"date":"2020-07-23T13:24:57","date_gmt":"2020-07-23T05:24:57","guid":{"rendered":"http:\/\/www.shuizilong.com\/house\/?p=1666"},"modified":"2020-07-23T13:24:57","modified_gmt":"2020-07-23T05:24:57","slug":"bzoj-2125-%e6%9c%80%e7%9f%ad%e8%b7%af","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/bzoj-2125-%e6%9c%80%e7%9f%ad%e8%b7%af\/","title":{"rendered":"BZOJ 2125: \u6700\u77ed\u8def"},"content":{"rendered":"<p><a href=\"https:\/\/darkbzoj.tk\/problem\/1023\">BZOJ<\/a> | <a href=\"https:\/\/www.luogu.com.cn\/problem\/P5236\">Luogu<\/a><br \/>\n<a href=\"https:\/\/cmxrynp.github.io\/2018\/10\/29\/BZOJ-2125-%E6%9C%80%E7%9F%AD%E8%B7%AF\/\">https:\/\/cmxrynp.github.io\/2018\/10\/29\/BZOJ-2125-%E6%9C%80%E7%9F%AD%E8%B7%AF\/<\/a><br \/>\n<a href=\"https:\/\/blog.csdn.net\/LPA20020220\/article\/details\/88887231\">https:\/\/blog.csdn.net\/LPA20020220\/article\/details\/88887231<\/a><\/p>\n<h2>\u9898\u610f<\/h2>\n<p>\u7ed9\u4f60\u4e00\u4e2a\u6709 n \u4e2a\u70b9\u548c m \u6761\u8fb9\u7684\u4ed9\u4eba\u638c\u56fe\uff0c\u548c q \u7ec4\u8be2\u95ee\uff0c<br \/>\n\u6bcf\u6b21\u8be2\u95ee\u4e24\u4e2a\u70b9\u4e4b\u95f4\u7684\u6700\u77ed\u8def\u3002<\/p>\n<h2>\u9898\u89e3<\/h2>\n<h3>\u5706\u65b9\u6811<\/h3>\n<pre class=\"brush: cpp; light: false; title: ; toolbar: true; notranslate\" title=\"\">\nconst int N = int(2e4) + 9, LV = 15;\n\nVII adj&#x5B;N], adjj&#x5B;N];\nint dfn&#x5B;N], low&#x5B;N], tt, sta&#x5B;N], top;\nint fa&#x5B;LV]&#x5B;N], dep&#x5B;N], D&#x5B;N], DD&#x5B;N], L&#x5B;N];\nint n, nn;\n\ninline int move_up(int x, int t){\nfor (int lv=0;t;++lv,t&amp;gt;&amp;gt;=1)\nif (t&amp;amp;1) x = fa&#x5B;lv]&#x5B;x];\nreturn x;\n}\ninline int lca(int x, int y) {\nif (dep&#x5B;x]&amp;gt;dep&#x5B;y]) swap(x,y); y=move_up(y, dep&#x5B;y]-dep&#x5B;x]); if (x==y) return x;\nDWN(lv, LV, 0) if (fa&#x5B;lv]&#x5B;x]!=fa&#x5B;lv]&#x5B;y]) x = fa&#x5B;lv]&#x5B;x], y = fa&#x5B;lv]&#x5B;y];\nreturn fa&#x5B;0]&#x5B;x];\n}\nvoid getLCA(int x, int y, int &amp;amp;a, int &amp;amp;b, int &amp;amp;z) {\nif (dep&#x5B;x]&amp;gt;dep&#x5B;y]) swap(x,y); y=move_up(y, dep&#x5B;y]-dep&#x5B;x]); if (x==y) {z = x; return;}\nDWN(lv, LV, 0) if (fa&#x5B;lv]&#x5B;x]!=fa&#x5B;lv]&#x5B;y]) x = fa&#x5B;lv]&#x5B;x], y = fa&#x5B;lv]&#x5B;y];\na = x; b = y; z = fa&#x5B;0]&#x5B;x];\n}\n\nvoid add_edge(int u, int v, LL w) {\nadjj&#x5B;u].PB(MP(v, w));\n}\n\n#define v it-&amp;gt;fi\n#define w it-&amp;gt;se\nvoid tarjan(int u = 1, int p = -1) {\nlow&#x5B;u] = dfn&#x5B;u] = ++tt;\nsta&#x5B;++top] = u;\nECH(it, adj&#x5B;u]) if (v != p) {\nif (!dfn&#x5B;v]) {\nD&#x5B;v] = D&#x5B;u] + w; tarjan(v, u);\ncheckMin(low&#x5B;u], low&#x5B;v]);\nif (dfn&#x5B;v] == low&#x5B;v]) add_edge(u, v, w); \/\/ tree edge\n} else if (dfn&#x5B;v] &amp;lt; dfn&#x5B;u]) { \/\/ find circle\n            checkMin(low&#x5B;u], dfn&#x5B;v]);\n            add_edge(v, ++nn, 0); L&#x5B;nn] = D&#x5B;u]-D&#x5B;v]+w;\n            for (int i=top;sta&#x5B;i]!=v;--i) {\n                int d = D&#x5B;sta&#x5B;i]]-D&#x5B;v];\n                add_edge(nn, sta&#x5B;i], min(d, L&#x5B;nn]-d));\n            }\n        }\n    }\n    --top;\n}\n#define p fa&#x5B;0]&#x5B;u]\nvoid dfs(int u = 1) {\n    ECH(it, adjj&#x5B;u]) {\n        dep&#x5B;v] = dep&#x5B;u] + 1; DD&#x5B;v] = DD&#x5B;u] + w;\n        fa&#x5B;0]&#x5B;v] = u; for (int lv=0;fa&#x5B;lv+1]&#x5B;v]=fa&#x5B;lv]&#x5B;fa&#x5B;lv]&#x5B;v]];++lv);\n        dfs(v);\n    }\n}\n#undef p\n#undef w\n#undef v\n\nint main() {\n\n#ifndef ONLINE_JUDGE\n    freopen(&quot;in.txt&quot;, &quot;r&quot;, stdin);\n    \/\/freopen(&quot;out.txt&quot;, &quot;w&quot;, stdout);\n#endif\n\n    int Q, m; RD(n, m, Q);\n\n    DO(m) {\n        int x, y, w; RD(x, y, w);\n        adj&#x5B;x].PB(MP(y, w));\n        adj&#x5B;y].PB(MP(x, w));\n    }\n\n    nn = n; tarjan(); dfs();\n\n    DO(Q) {\n        int x, y, a, b, z; RD(x, y); getLCA(x, y, a, b, z);\n\n        \/\/cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; y &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt;  z&amp;lt;&amp;lt; endl;\n\n        if (z &amp;lt;= n) { \/\/ round one ...\n            OT(DD&#x5B;x]+DD&#x5B;y]-DD&#x5B;z]*2);\n        } else { \/\/ square one ...\n            int d = abs(D&#x5B;a]-D&#x5B;b]);\n            OT(DD&#x5B;x]+DD&#x5B;y]-DD&#x5B;a]-DD&#x5B;b]+min(d, L&#x5B;z]-d));\n        }\n    }\n}\n<\/pre>\n<h3>\u52a8\u6001\u4ed9\u4eba\u638c<\/h3>\n<p><a href=\"https:\/\/www.luogu.com.cn\/record\/31868182\">https:\/\/www.luogu.com.cn\/record\/31868182<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>BZOJ | Luogu https:\/\/cmxrynp.github.io\/2018\/10\/29\/BZOJ-2125-%E6%9C%80%E7%9F%AD%E8%B7%AF\/ https:\/\/blog.csdn.net\/LPA20020220\/article\/details\/88887231 \u9898\u610f \u7ed9\u4f60\u4e00\u4e2a\u6709 n \u4e2a\u70b9\u548c m \u6761\u8fb9\u7684\u4ed9\u4eba\u638c\u56fe\uff0c\u548c q \u7ec4\u8be2\u95ee\uff0c \u6bcf\u6b21\u8be2\u95ee\u4e24\u4e2a\u70b9\u4e4b\u95f4\u7684\u6700\u77ed\u8def\u3002 \u9898\u89e3 \u5706\u65b9\u6811 const int N = int(2e4) + 9, LV = 15; VII adj&#x5B;N], adjj&#x5B;N]; int dfn&#x5B;N], low&#x5B;N], tt, sta&#x5B;N], top; int fa&#x5B;LV]&#x5B;N], dep&#x5B;N], D&#x5B;N], DD&#x5B;N], L&#x5B;N]; int n, nn; inline int move_up(int x, int t){ for (int lv=0;t;++lv,t&amp;gt;&amp;gt;=1) if (t&amp;amp;1) [&hellip;]<\/p>\n","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":[1],"tags":[],"class_list":["post-1666","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-qS","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1666","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=1666"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1666\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=1666"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=1666"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=1666"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}