{"@attributes":{"version":"2.0"},"channel":{"title":"\u70ed\u5c18\u7684\u535a\u5ba2","link":"https:\/\/rechenz.github.io\/","description":"Recent content on \u70ed\u5c18\u7684\u535a\u5ba2","generator":"Hugo -- gohugo.io","language":"zh-CN","lastBuildDate":"Wed, 22 Jul 2026 20:10:00 +0800","item":[{"title":"\u6743\u91cd\u7ea6\u675f\u8bad\u7ec3\u5b9e\u9a8c \u2014\u2014 \u4ece\u300c\u673a\u80fd\u4e0d\u5168\u300d\u5230\u300c\u673a\u80fd\u5065\u5168\u300d","link":"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/","pubDate":"Wed, 22 Jul 2026 20:10:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/","description":"\n <blockquote>\n <p>\u628a\u4eba\u7c7b\u4ece\u5a74\u513f\u5230\u6210\u4eba\u7684\u300c\u673a\u80fd\u4e0d\u5168\u2192\u5065\u5168\u300d\u8fc7\u7a0b\uff0c\u62bd\u8c61\u4e3a\u4e00\u79cd\u6a21\u578b\u8bad\u7ec3\u7b56\u7565\u3002<\/p>\n\n <\/blockquote>\n<h2 id=\"\u5b9e\u9a8c\u6784\u60f3\">\u5b9e\u9a8c\u6784\u60f3\n<\/h2><p>\u8fd9\u4e2aidea\u5176\u5b9e\u662f\u56e0\u4e3a\u665a\u4e0a\u8eba\u5728\u5e8a\u4e0a\u778e\u60f3\u60f3\u5230\u7684\uff0c\u8ddf\u7fa4\u91cc\u7684\u5927\u4f6c\u8ba8\u8bba\u4e4b\u540e\u4fbf\u60f3\u7740\u6765\u9a8c\u8bc1\u4e00\u4e0b\u662f\u5426\u53ef\u884c\u3002<\/p>\n<p>\u5176\u5b9e\u6211\u8ba4\u4e3a\u8fd9\u4e2atrick\u66f4\u5e94\u8be5\u653e\u5728\u5177\u8eab\u667a\u80fd\u7684\u6a21\u578b\u6765\u5b66\u4e60\uff0c\u800c\u4e0d\u662f\u5927\u8bed\u8a00\u6a21\u578b\u548c\u56fe\u50cf\u8bc6\u522b\u8fd9\u79cd\uff0c\u56e0\u4e3aLLM\u548cCV\u7684\u8f93\u51fa\u7ef4\u5ea6\u592a\u9ad8\u4e86\uff0c\u5728\u4fe1\u606f\u8bba\u4e0a\u5f88\u96be\u4fdd\u8bc1\u7406\u8bba\u6210\u7acb\uff0c\u4f46\u662f\u6211\u4e00\u4e2a\u7834211\u672c\u79d1\u751f\u4e5f\u6ca1\u6cd5\u53bb\u5b9e\u9a8c\u5177\u8eab\u667a\u80fd\u7684\u4e1c\u897f\uff0c\u53ea\u80fd\u5148\u505a\u4e00\u4e2a\u8bc4\u4f30\u3002<\/p>\n<h2 id=\"\u5b9e\u9a8c\u65e5\u5fd7\">\u5b9e\u9a8c\u65e5\u5fd7\n<\/h2><h3 id=\"2026\u5e747\u670821\u65e5\">2026\u5e747\u670821\u65e5\n<\/h3><h4 id=\"\u601d\u8def\u5c1d\u8bd5\">\u601d\u8def\u5c1d\u8bd5\n<\/h4><p>\u5c1d\u8bd5\u76f4\u63a5\u5bf9\u6a21\u578b\u6743\u91cd\u7684\u4e00\u90e8\u5206\u503c\u8fdb\u884c\u624b\u52a8\u5f52\u5e73\u3002<\/p>\n<h4 id=\"\u5b9e\u9a8c\u8bbe\u8ba1\">\u5b9e\u9a8c\u8bbe\u8ba1\n<\/h4><h5 id=\"\u6a21\u578b\">\u6a21\u578b\n<\/h5><ul>\n<li><strong>TinyViT<\/strong>\uff08~270\u4e07\u53c2\u6570\uff0c6\u5c42 Transformer\uff0cpatch=4\uff09<\/li>\n<li>\u8bad\u7ec3\u96c6\uff1aFashionMNIST\uff086\u4e07\u5f20\uff09<\/li>\n<\/ul>\n<h5 id=\"\u7ea6\u675f\u7b56\u7565\">\u7ea6\u675f\u7b56\u7565\n<\/h5><table>\n\t<thead>\n\t\t\t<tr>\n\t\t\t\t\t<th>\u6a21\u5f0f<\/th>\n\t\t\t\t\t<th>\u505a\u6cd5<\/th>\n\t\t\t\t\t<th>\u7c7b\u6bd4<\/th>\n\t\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Baseline<\/strong><\/td>\n\t\t\t\t\t<td>\u6b63\u5e38\u8bad\u7ec3\uff0c\u65e0\u7ea6\u675f<\/td>\n\t\t\t\t\t<td>\u6b63\u5e38\u53d1\u80b2<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Hard Mask<\/strong> (\u5df2\u5f03\u7528)<\/td>\n\t\t\t\t\t<td>\u8bad\u7ec3\u4e2d\u968f\u673a\u6e05\u96f6\u6743\u91cd<\/td>\n\t\t\t\t\t<td>\u795e\u7ecf\u8fde\u63a5\u65ad\u88c2 \u274c<\/td>\n\t\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n<h5 id=\"\u8c03\u5ea6\u7b56\u7565-schedule\">\u8c03\u5ea6\u7b56\u7565 (Schedule)\n<\/h5><table>\n\t<thead>\n\t\t\t<tr>\n\t\t\t\t\t<th>\u540d\u79f0<\/th>\n\t\t\t\t\t<th>\u884c\u4e3a<\/th>\n\t\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>decay<\/strong><\/td>\n\t\t\t\t\t<td>\u6700\u5927\u5f3a\u5ea6 \u2192 \u7ebf\u6027\u8870\u51cf\u5230 0<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>triangle<\/strong><\/td>\n\t\t\t\t\t<td>\u5c0f\u5f3a\u5ea6 \u2192 \u5347\u5230\u6700\u5927 \u2192 \u964d\u56de 0<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>step<\/strong><\/td>\n\t\t\t\t\t<td>\u524d N \u4e2a epoch \u56fa\u5b9a\u5f3a\u5ea6\uff0c\u4e4b\u540e\u5168\u653e\u5f00<\/td>\n\t\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n<h5 id=\"\u521d\u6b65\u7ed3\u679c\u6743\u91cd-mask-\u65b9\u6848\">\u521d\u6b65\u7ed3\u679c\uff08\u6743\u91cd Mask \u65b9\u6848\uff09\n<\/h5><p><img alt=\"\u786cMask + triangle \u5bf9\u6bd4\u56fe\" class=\"gallery-image\" data-flex-basis=\"531px\" data-flex-grow=\"221\" height=\"804\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/hard_triangle_result.png\" srcset=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/hard_triangle_result_hu_c24ed4ec1531ba9f.png 800w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/hard_triangle_result_hu_6853892ae04ae3f2.png 1600w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/hard_triangle_result.png 1779w\" width=\"1779\"><\/p>\n<ul>\n<li><strong>Mask \u671f\uff08epoch 1-24\uff09\uff1atest acc \u5361\u5728 10%<\/strong>\u2014\u2014\u6743\u91cd\u6e05\u96f6\u8ba9\u68af\u5ea6\u65e0\u6cd5\u79ef\u7d2f\uff0c\u6a21\u578b\u5b66\u4e0d\u52a8<\/li>\n<li><strong>\u653e\u5f00\u540e\uff08epoch 25+\uff09\uff1a\u706b\u7bad\u8d77\u98de<\/strong>\uff0c\u4ece 46% \u8ffd\u5230 85.6%\uff0c\u4f46\u6ca1\u8ffd\u4e0a baseline\uff0891%\uff09<\/li>\n<li><strong>\u7ed3\u8bba\uff1a\u6743\u91cd\u5c42\u9762\u64cd\u4f5c\u5bf9 Transformer \u592a\u66b4\u529b<\/strong>\uff0c\u5e94\u6539\u4e3a\u6fc0\u6d3b\u503c\u5c42\u9762\u7684\u7ea6\u675f\uff08dropout \/ \u566a\u58f0\uff09\uff0c\u6216\u8005\u8003\u8651\u662f\u5426\u5b58\u5728\u4ee3\u6570\u65b9\u6cd5\u5c06\u5c4f\u853d\u7684\u6743\u91cd\u77ed\u8def\u3002\uff082026\u5e747\u670822\u65e5 17:54:06\u66f4\u6b63\uff0c\u4ee3\u7801\u5b58\u5728\u903b\u8f91\u95ee\u9898\uff0c\u6743\u91cd\u5c42\u9762\u64cd\u4f5c\u5e76\u65e0\u95ee\u9898\uff09<\/li>\n<\/ul>\n<h3 id=\"2026\u5e747\u670822\u65e5\">2026\u5e747\u670822\u65e5\n<\/h3><h4 id=\"\u6fc0\u6d3b\u503c\u7ea6\u675f\u5b9e\u9a8c\">\u6fc0\u6d3b\u503c\u7ea6\u675f\u5b9e\u9a8c\n<\/h4><p>\u5c06\u7ea6\u675f\u4ece\u6743\u91cd\u5c42\u79fb\u5230\u6fc0\u6d3b\u5c42\uff0c\u7c7b\u6bd4\u300c\u611f\u5b98\/\u5904\u7406\u4e0d\u6210\u719f\u2192\u9010\u6e10\u5065\u5168\u300d\u3002<\/p>\n<h5 id=\"\u6a21\u578b-1\">\u6a21\u578b\n<\/h5><ul>\n<li><strong>TinyViT<\/strong>\uff08~270\u4e07\u53c2\u6570\uff0c6\u5c42 Transformer\uff0cpatch=4\uff09<\/li>\n<li>\u8bad\u7ec3\u96c6\uff1aFashionMNIST\uff086\u4e07\u5f20\uff09<\/li>\n<li>Seed=42, Epochs=50, Constraint Epochs=25, Schedule=decay, AMP<\/li>\n<\/ul>\n<h5 id=\"\u65b0\u589e\u7ea6\u675f\u6a21\u5f0f\">\u65b0\u589e\u7ea6\u675f\u6a21\u5f0f\n<\/h5><table>\n\t<thead>\n\t\t\t<tr>\n\t\t\t\t\t<th>\u6a21\u5f0f<\/th>\n\t\t\t\t\t<th>\u5c42\u7ea7<\/th>\n\t\t\t\t\t<th>\u505a\u6cd5<\/th>\n\t\t\t\t\t<th>\u7c7b\u6bd4<\/th>\n\t\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Dropout<\/strong><\/td>\n\t\t\t\t\t<td>\u6fc0\u6d3b\u5c42<\/td>\n\t\t\t\t\t<td>\u524d\u5411\u968f\u673a\u4e22\u5f03\u795e\u7ecf\u5143\u6fc0\u6d3b\uff0c\u7ea6\u675f\u671f\u8870\u51cf\u5230 0<\/td>\n\t\t\t\t\t<td>\u611f\u5b98\u5904\u7406\u4e0d\u6210\u719f<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>ActNoise<\/strong><\/td>\n\t\t\t\t\t<td>\u6fc0\u6d3b\u5c42<\/td>\n\t\t\t\t\t<td>\u6fc0\u6d3b\u503c\u52a0\u9ad8\u65af\u566a\u58f0\uff08std\u2248rate\u00d70.3\uff09\uff0c\u7ea6\u675f\u671f\u8870\u51cf<\/td>\n\t\t\t\t\t<td>\u795e\u7ecf\u7cfb\u7edf\u566a\u97f3<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Fixed Mask<\/strong> \ud83c\udd95<\/td>\n\t\t\t\t\t<td>\u6743\u91cd\u5c42<\/td>\n\t\t\t\t\t<td>\u7ea6\u675f\u671f\u5f00\u59cb\u65f6\u9009\u5b9a\u56fa\u5b9a\u6743\u91cd\u5b50\u96c6 mask\uff0c\u5168\u7a0b\u4e0d\u53d8<\/td>\n\t\t\t\t\t<td>\u56fa\u5b9a\u795e\u7ecf\u8fde\u63a5\u7f3a\u5931<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Subspace SVD<\/strong> \ud83c\udd95<\/td>\n\t\t\t\t\t<td>\u6743\u91cd\u5c42<\/td>\n\t\t\t\t\t<td>\u6bcf epoch SVD \u622a\u65ad\u5230\u4f4e\u79e9\uff0c\u9010 epoch \u653e\u5f00<\/td>\n\t\t\t\t\t<td>\u6570\u5b66\u77ed\u8def\uff08\u4f4e\u7ef4\u53d1\u80b2\uff09<\/td>\n\t\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n<h5 id=\"\u5b9e\u9a8c\u7ed3\u679c\">\u5b9e\u9a8c\u7ed3\u679c\n<\/h5><p><img alt=\"\u6fc0\u6d3b\u503c\u7ea6\u675f + \u6743\u91cd\u77ed\u8def\u5bf9\u6bd4\" class=\"gallery-image\" data-flex-basis=\"486px\" data-flex-grow=\"202\" height=\"732\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/act_and_short_result.png\" srcset=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/act_and_short_result_hu_43704228b20de5ef.png 800w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/act_and_short_result.png 1484w\" width=\"1484\"><\/p>\n<p><img alt=\"\u51c6\u786e\u7387 vs Epoch\" class=\"gallery-image\" data-flex-basis=\"645px\" data-flex-grow=\"268\" height=\"887\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/accuracy_vs_epoch.png\" srcset=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/accuracy_vs_epoch_hu_c460147a2210e60c.png 800w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/accuracy_vs_epoch_hu_42de3a9e016a3ee9.png 1600w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/accuracy_vs_epoch.png 2384w\" width=\"2384\"><\/p>\n<table>\n\t<thead>\n\t\t\t<tr>\n\t\t\t\t\t<th>\u6a21\u5f0f<\/th>\n\t\t\t\t\t<th>Best Test Acc<\/th>\n\t\t\t\t\t<th>vs Baseline<\/th>\n\t\t\t\t\t<th>\u7ed3\u8bba<\/th>\n\t\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Baseline<\/strong><\/td>\n\t\t\t\t\t<td>88.59%<\/td>\n\t\t\t\t\t<td>\u2014<\/td>\n\t\t\t\t\t<td>\u6b63\u5e38\u53d1\u80b2\uff0c\u57fa\u7ebf<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Dropout<\/strong><\/td>\n\t\t\t\t\t<td>87.39%<\/td>\n\t\t\t\t\t<td>-1.2%<\/td>\n\t\t\t\t\t<td>\u2705 \u51e0\u4e4e\u65e0\u635f\uff0c\u6a21\u578b\u5bf9\u6fc0\u6d3b\u5c42\u6270\u52a8\u975e\u5e38\u9c81\u68d2<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>ActNoise<\/strong><\/td>\n\t\t\t\t\t<td>88.40%<\/td>\n\t\t\t\t\t<td>-0.2%<\/td>\n\t\t\t\t\t<td>\u2705 \u4e0d\u4ec5\u6ca1\u4f24\u5bb3\uff0c\u751a\u81f3\u6709\u8f7b\u5fae\u6b63\u5219\u5316\u6548\u679c<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Fixed Mask<\/strong><\/td>\n\t\t\t\t\t<td>87.79%<\/td>\n\t\t\t\t\t<td>-0.8%<\/td>\n\t\t\t\t\t<td>\u2705 \u5dee\u8ddd\u5f88\u5c0f\uff0c\u76f4\u89c9\u5728\u66f4\u5927\u7684\u6570\u636e\u96c6\u4e0a\u4e5f\u8bb8\u4f1a\u66f4\u6709\u6548\u679c\uff0c\u5f85\u9a8c\u8bc1<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td><strong>Subspace SVD<\/strong><\/td>\n\t\t\t\t\t<td>65.35%<\/td>\n\t\t\t\t\t<td>-23.2%<\/td>\n\t\t\t\t\t<td>\u274c \u6570\u503c\u5d29\u584c\uff0ctest loss \u98d9\u5230 64\uff0c\u52c9\u5f3a\u722c\u56de<\/td>\n\t\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n<h5 id=\"\u7ed3\u8bba\">\u7ed3\u8bba\n<\/h5><ol>\n<li><strong>\u6fc0\u6d3b\u5c42\u7ea6\u675f\u51e0\u4e4e\u4e0d\u5f71\u54cd\u6700\u7ec8\u6027\u80fd<\/strong>\u2014\u2014Transformer \u5bf9 dropout\/\u566a\u58f0\u7684\u9c81\u68d2\u6027\u8fdc\u8d85\u9884\u671f<\/li>\n<li><strong>Fixed Mask \u4fee\u590d\u540e\u63a5\u8fd1 baseline<\/strong>\u2014\u2014\u4fee\u590d\u4e86\u68af\u5ea6-\u6743\u91cd\u9519\u4f4d bug \u540e\uff0c\u56fa\u5b9a mask \u4ece 79% \u8df3\u5230 87.79%<\/li>\n<li><strong>\u6743\u91cd\u5c42\u7ea6\u675f\uff08SVD \u622a\u65ad\uff09\u4ecd\u662f\u786c\u4f24<\/strong>\u2014\u2014\u4f4e\u79e9\u622a\u65ad\u5728 ViT \u4e0a\u9020\u6210\u6570\u503c\u4e0d\u7a33\u5b9a\uff0c\u9700\u8981\u91cd\u65b0\u8bbe\u8ba1\uff08warmup\u3001\u90e8\u5206\u5c42\u65bd\u52a0\u3001\u66f4\u6162\u7684 rank \u589e\u957f\uff09<\/li>\n<li><strong>Fixed Mask &raquo; \u968f\u673a Mask<\/strong>\u2014\u2014\u56fa\u5b9a mask \u5b50\u96c6\u8ba9\u88ab\u4fdd\u7559\u7684\u6743\u91cd\u80fd\u7a33\u5b9a\u79ef\u7d2f\u68af\u5ea6\uff0c\u9a8c\u8bc1\u4e86\u300c\u56fa\u5b9a\u673a\u80fd\u4e0d\u5168\u300d\u4f18\u4e8e\u300c\u6bcf\u6b21\u968f\u673a\u91cd\u65b0\u53d7\u4f24\u300d<\/li>\n<li>\u601d\u8003\u5e94\u8be5\u5c1d\u8bd5\u66f4\u5927\u7684\u6570\u636e\u96c6\uff0cFashionMNIST\u6570\u636e\u8fc7\u4e8e\u7b80\u5355\u96be\u4ee5\u4f53\u73b0trick\u4ef7\u503c<\/li>\n<\/ol>\n<h3 id=\"fixed-mask\u5728cifar10\u6570\u636e\u96c6\u4e0a\u7684\u5b9e\u9a8c\">Fixed Mask\u5728CIFAR10\u6570\u636e\u96c6\u4e0a\u7684\u5b9e\u9a8c\n<\/h3><h4 id=\"\u8bad\u7ec3\u539f\u578b\">\u8bad\u7ec3\u539f\u578b\n<\/h4><p><strong>\u6570\u636e\u96c6\uff1a<\/strong> CIFAR-10\uff08\u5f69\u8272 32\u00d732\uff0c5 \u4e07\u8bad\u7ec3\u56fe\uff0c10 \u7c7b\uff09\n<strong>\u6a21\u578b\uff1a<\/strong> TinyViT\uff08270 \u4e07\u53c2\u6570\uff0c6 \u5c42 Transformer\uff09\n<strong>\u8bad\u7ec3\uff1a<\/strong> 100 epoch\uff0cAMP \u6df7\u5408\u7cbe\u5ea6<\/p>\n<h4 id=\"\u5b9e\u9a8c\u7ec6\u8282\">\u5b9e\u9a8c\u7ec6\u8282\n<\/h4><p><strong>Fixed Mask \u7ea6\u675f\u903b\u8f91\uff1a<\/strong><\/p>\n<ul>\n<li>\u8bad\u7ec3\u5f00\u59cb\u524d\u7528 <code>seed=42<\/code> \u56fa\u5b9a\u751f\u6210\u4e00\u4e2a 50% \u96f6\u7684\u4e8c\u8fdb\u5236 mask\uff08\u6bcf\u4e2a\u6743\u91cd\u77e9\u9635\u6709\u81ea\u5df1\u56fa\u5b9a\u7684 mask\uff09<\/li>\n<li><strong>epoch 1 \u5230 50\uff08\u7ea6\u675f\u671f\uff09\uff1a<\/strong> <code>weight = weight * mask<\/code> in-place\uff0cmask \u6bd4\u4f8b\u4ece 50% \u6309 decay \u8870\u51cf\u5230 0%<\/li>\n<li><strong>epoch 51 \u5230 100\uff08\u653e\u5f00\u671f\uff09\uff1a<\/strong> \u4e0d\u518d mask\uff0c\u6240\u6709\u6743\u91cd\u6b63\u5e38\u8bad\u7ec3<\/li>\n<li>\u88ab mask \u7684\u4f4d\u7f6e\u5728\u524d\u5411\u65f6\u4e3a 0 \u2192 \u68af\u5ea6\u4e3a 0 \u2192 AdamW \u4e0d\u66f4\u65b0 \u2192 \u89e3\u9501\u540e\u4ece\u96f6\u5f00\u59cb\u5b66<\/li>\n<\/ul>\n<p><strong>Baseline \u5bf9\u7167\uff1a<\/strong> \u540c\u6837\u7684\u53c2\u6570\uff0c\u4f46\u6ca1\u6709 mask \u64cd\u4f5c\uff0c\u4ece\u5934\u5230\u5c3e\u6b63\u5e38\u8bad\u7ec3<\/p>\n<p><strong>\u6570\u636e\u589e\u5f3a\uff1a<\/strong> RandomCrop + RandomHorizontalFlip + Normalize\uff08CIFAR-10 \u6807\u51c6\u6d41\u7a0b\uff09<\/p>\n<h4 id=\"\u5b9e\u9a8c\u7ed3\u679c-1\">\u5b9e\u9a8c\u7ed3\u679c\n<\/h4><p><img alt=\"\u5b9e\u9a8c\u8fc7\u7a0bacc\u5bf9\u6bd4\" class=\"gallery-image\" data-flex-basis=\"614px\" data-flex-grow=\"256\" height=\"814\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_comparison.png\" srcset=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_comparison_hu_734759db5f404a0d.png 800w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_comparison_hu_ec52ca9ab42ef77c.png 1600w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_comparison.png 2084w\" width=\"2084\"><\/p>\n<p><img alt=\"\u5b9e\u9a8c\u7ed3\u679c\u5bf9\u6bd4\" class=\"gallery-image\" data-flex-basis=\"339px\" data-flex-grow=\"141\" height=\"732\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_bars.png\" srcset=\"https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_bars_hu_90b312de3d0c1f46.png 800w, https:\/\/rechenz.github.io\/post\/%E6%9D%83%E9%87%8D%E7%BA%A6%E6%9D%9F%E8%AE%AD%E7%BB%83%E5%AE%9E%E9%AA%8C\/cifar10_bars.png 1034w\" width=\"1034\"><\/p>\n<p><strong>\u533a\u522b\u4e0a\u4e00\u6b21\u5b9e\u9a8c\uff08FashionMNIST\uff09\uff1a<\/strong><\/p>\n<table>\n\t<thead>\n\t\t\t<tr>\n\t\t\t\t\t<th>\u9879\u76ee<\/th>\n\t\t\t\t\t<th>FashionMNIST<\/th>\n\t\t\t\t\t<th>CIFAR-10<\/th>\n\t\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t\t<tr>\n\t\t\t\t\t<td>\u56fe\u50cf<\/td>\n\t\t\t\t\t<td>\u5355\u901a\u9053\u7070\u5ea6 28\u00d728<\/td>\n\t\t\t\t\t<td>\u4e09\u901a\u9053\u5f69\u8272 32\u00d732<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td>\u8bad\u7ec3\u96c6<\/td>\n\t\t\t\t\t<td>6 \u4e07\u5f20<\/td>\n\t\t\t\t\t<td>5 \u4e07\u5f20<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td>\u96be\u5ea6<\/td>\n\t\t\t\t\t<td>\u7b80\u5355<\/td>\n\t\t\t\t\t<td>\u96be<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td>Epoch<\/td>\n\t\t\t\t\t<td>50\uff0825+25\uff09<\/td>\n\t\t\t\t\t<td>100\uff0850+50\uff09<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td>Baseline<\/td>\n\t\t\t\t\t<td>88.59%<\/td>\n\t\t\t\t\t<td>81.04%<\/td>\n\t\t\t<\/tr>\n\t\t\t<tr>\n\t\t\t\t\t<td>Fixed Mask<\/td>\n\t\t\t\t\t<td>87.79%\uff08-0.8%\uff09<\/td>\n\t\t\t\t\t<td><strong>82.69%\uff08+1.65%\uff09<\/strong><\/td>\n\t\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n<h4 id=\"\u7ed3\u8bba-1\">\u7ed3\u8bba\n<\/h4><ol>\n<li>\u5b9e\u9a8c\u8bbe\u8ba1\u601d\u8def\u57fa\u672c\u6b63\u786e\uff0c\u4e0e\u6734\u7d20\u8bad\u7ec3\u65b9\u5f0f\u76f8\u6bd4\u5728\u66f4\u4e3a\u590d\u6742\u7684\u6570\u636e\u96c6\u4e0a\u8868\u73b0\u4f18\u79c0<\/li>\n<li>\uff08\u63a8\u6d4b\uff09\u6b64\u8bad\u7ec3\u65b9\u5f0f\u5728\u8f93\u51fa\u7ef4\u5ea6\u8f83\u5c0f\u65f6\u4f1a\u8868\u73b0\u4f18\u79c0\uff0c\u6b64\u8bad\u7ec3\u65b9\u5f0f\u5e76\u4e0d\u9002\u7528\u4e8eGPT\u7b49\u8bed\u8a00\u8f93\u51fa\u6a21\u578b\uff08\u4ece\u4fe1\u606f\u8bba\u7684\u89d2\u5ea6\u7406\u89e3\uff09\uff0c\u4f46\u662f\u8f93\u5165\u7ef4\u5ea6\u5e94\u8be5\u8d8a\u5927\u8d8a\u597d\u589e\u5927<\/li>\n<li>\uff08\u63a8\u6d4b\uff09\u6211\u5b9e\u9645\u611f\u89c9\u8fd9\u4e2atrick\u66f4\u9002\u5408\u653e\u5728\u5177\u8eab\u667a\u80fd\u65b9\u9762\uff0c\u4f46\u662f\u6211\u76ee\u524d\u5b9e\u5728\u6ca1\u6709\u8fd9\u4e2a\u80fd\u529b\u4e0e\u8d44\u6e90\u3002<\/li>\n<\/ol>"},{"title":"\u5173\u4e8edp\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u7684\u8bbe\u8ba14","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A14\/","pubDate":"Sat, 18 Jul 2026 16:50:28 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A14\/","description":"<p>\u6211\u4eec\u6709\u7684\u65f6\u5019\u4f1a\u53d1\u73b0\u4e00\u4e2a\u95ee\u9898\uff0c\u9898\u76ee\u7ed9\u7684\u6570\u636e\u8303\u56f4\u6216\u8005\u662f\u67d0\u4e9b\u5f15\u5bfc\u8ba9\u6211\u4eec\u7684dp\u72b6\u6001\u8bbe\u8ba1\u975e\u5e38\u663e\u7136\uff0c\u4f46\u662f\u53ef\u80fd\u8f6c\u79fb\u7684\u65f6\u5019\u4f1a\u9047\u5230\u96be\u4ee5\u7ef4\u62a4\u6216\u8005\u590d\u6742\u5ea6\u4e0d\u5bf9\u7684\u60c5\u51b5\u3002<\/p>\n<p>\u90a3\u4e48\u6211\u4eec\u9700\u8981\u8003\u8651\u4f18\u5316\uff0c\u5728\u7b97\u6cd5\u4e2d\u4e00\u79cd\u5e38\u89c1\u7684\u4f18\u5316\u662f\u9884\u5904\u7406\uff0c\u5728\u67d0\u4e9b\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5c06\u96be\u4ee5\u653e\u5728\u65b9\u7a0b\u91cc\u7ef4\u62a4\u7684\u6570\u636e\u6216\u8005\u96be\u4ee5\u627e\u5230\u7ef4\u62a4\u987a\u5e8f\u7684\u53c2\u6570\u8fdb\u884c\u9884\u5904\u7406\uff0c\u4f46\u662f\u8bb0\u4f4f\u6211\u4eec\u9700\u8981\u53bb\u627e\u5230\u4f7f\u6211\u4eec\u8fd9\u4e2a\u9884\u5904\u7406\u4e0d\u4f1a\u8ddf\u968fdp\u65b9\u7a0b\u800c\u6539\u53d8\u7684\u6027\u8d28\u3002<\/p>\n<p><a class=\"link\" href=\"https:\/\/codeforces.com\/problemset\/problem\/1106\/E\" target=\"_blank\" rel=\"noopener\"\n >CF1106E<\/a><\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#define int long long\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">100005<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> M <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">205<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n, m, k, dp[N][M], t[N], s[N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Node<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> t;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> d;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> w;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#66d9ef\">operator<\/span> <span style=\"color:#f92672\">&lt;<\/span>(<span style=\"color:#66d9ef\">const<\/span> Node<span style=\"color:#f92672\">&amp;<\/span> other)<span style=\"color:#66d9ef\">const<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> (w <span style=\"color:#f92672\">!=<\/span> other.w) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> w <span style=\"color:#f92672\">&lt;<\/span> other.w;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">else<\/span> <span style=\"color:#66d9ef\">return<\/span> d <span style=\"color:#f92672\">&lt;<\/span> other.d;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}a[N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#a6e22e\">cmp<\/span>(Node A, Node B) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> (A.s <span style=\"color:#f92672\">!=<\/span> B.s) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> A.s <span style=\"color:#f92672\">&lt;<\/span> B.s;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">else<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> A.t <span style=\"color:#f92672\">&lt;<\/span> B.t;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>priority_queue<span style=\"color:#f92672\">&lt;<\/span>Node<span style=\"color:#f92672\">&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">signed<\/span> <span style=\"color:#a6e22e\">main<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span> cin <span style=\"color:#f92672\">&gt;&gt;<\/span> n <span style=\"color:#f92672\">&gt;&gt;<\/span> m <span style=\"color:#f92672\">&gt;&gt;<\/span> k;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">1<\/span>;i <span style=\"color:#f92672\">&lt;=<\/span> k;i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span> cin <span style=\"color:#f92672\">&gt;&gt;<\/span> a[i].s <span style=\"color:#f92672\">&gt;&gt;<\/span> a[i].t <span style=\"color:#f92672\">&gt;&gt;<\/span> a[i].d <span style=\"color:#f92672\">&gt;&gt;<\/span> a[i].w;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> sort(a <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>, a <span style=\"color:#f92672\">+<\/span> k <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>, cmp);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> cur <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> t[<span style=\"color:#ae81ff\">0<\/span>] <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">1<\/span>;i <span style=\"color:#f92672\">&lt;=<\/span> n;i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span> (cur <span style=\"color:#f92672\">&lt;=<\/span> k <span style=\"color:#f92672\">&amp;&amp;<\/span> a[cur].s <span style=\"color:#f92672\">&lt;=<\/span> i) {\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(a[cur<span style=\"color:#f92672\">++<\/span>]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> (q.empty()) t[i] <span style=\"color:#f92672\">=<\/span> i <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">else<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span> Node x <span style=\"color:#f92672\">=<\/span> q.top();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> (x.t <span style=\"color:#f92672\">&lt;<\/span> i) {\n<\/span><\/span><span style=\"display:flex;\"><span> i<span style=\"color:#f92672\">--<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> t[i] <span style=\"color:#f92672\">=<\/span> x.d <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> s[i] <span style=\"color:#f92672\">=<\/span> x.w;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> memset(dp, <span style=\"color:#ae81ff\">0x3f<\/span>, <span style=\"color:#66d9ef\">sizeof<\/span> dp);\n<\/span><\/span><span style=\"display:flex;\"><span> dp[<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>] <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>;i <span style=\"color:#f92672\">&lt;=<\/span> n;i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> j <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>;j <span style=\"color:#f92672\">&lt;=<\/span> m;j<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span> dp[i <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>][j <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>] <span style=\"color:#f92672\">=<\/span> min(dp[i <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>][j <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>], dp[i][j]);\n<\/span><\/span><span style=\"display:flex;\"><span> dp[t[i]][j] <span style=\"color:#f92672\">=<\/span> min(dp[t[i]][j], dp[i][j] <span style=\"color:#f92672\">+<\/span> s[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> ans <span style=\"color:#f92672\">=<\/span> LONG_LONG_MAX;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>;i <span style=\"color:#f92672\">&lt;=<\/span> m;i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span> ans <span style=\"color:#f92672\">=<\/span> min(ans, dp[n <span style=\"color:#f92672\">+<\/span> <span style=\"color:#ae81ff\">1<\/span>][i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> cout <span style=\"color:#f92672\">&lt;&lt;<\/span> ans <span style=\"color:#f92672\">&lt;&lt;<\/span> endl;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"\u57fa\u4e8eDAG\u7684\u4efb\u52a1\u7ba1\u7406\u7cfb\u7edf","link":"https:\/\/rechenz.github.io\/post\/%E5%9F%BA%E4%BA%8Edag%E7%9A%84%E4%BB%BB%E5%8A%A1%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F\/","pubDate":"Fri, 26 Jun 2026 21:46:41 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%9F%BA%E4%BA%8Edag%E7%9A%84%E4%BB%BB%E5%8A%A1%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F\/","description":"<p>\u672c\u6587\u5c06\u5bf9\u4e00\u4e2a\u57fa\u4e8e $\\text{DAG}$ \u7684\u4efb\u52a1\u7ba1\u7406\u7cfb\u7edf\u5b9e\u73b0\u8be6\u7ec6\u903b\u8f91\u548c\u4ee3\u7801\u62c6\u89e3\u3002<\/p>\n<p>\uff08\u57fa\u4e8e Unity \u5b9e\u73b0\uff09<\/p>\n<h2 id=\"\u7406\u8bba\u57fa\u5e95\u8bb2\u89e3\">\u7406\u8bba\u57fa\u5e95\u8bb2\u89e3\n<\/h2><p>\u6211\u4eec\u77e5\u9053 $\\text{DAG}$ \u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u800c\u5728 $\\text{DAG}$ \u4e0a\u53ef\u4ee5\u8fdb\u884c\u62d3\u6251\u6392\u5e8f\uff0c\u6211\u4eec\u53d1\u73b0\u62d3\u6251\u6392\u5e8f\u7684\u672c\u8d28\u5c31\u662f\u6309\u7167\u8282\u70b9\u4f9d\u8d56\u5173\u7cfb\u8fdb\u884c\u6392\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u4fbf\u53ef\u4ee5\u5229\u7528\u8fd9\u4e2a\u8fdb\u884c\u7ba1\u7406\u4efb\u4f55\u4f9d\u5b58\u5173\u7cfb\u3002<\/p>\n<p>\u662f\u7684\uff0c\u4efb\u610f\u4f9d\u5b58\u5173\u7cfb\uff0c\u6240\u4ee5\u8fd9\u4e2a\u5b9e\u73b0\u7684\u4efb\u52a1\u7ba1\u7406\u7cfb\u7edf\u8fc7\u4e8e\u5e95\u5c42\uff0c\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u5728\u4e0d\u8fdb\u884c\u9ad8\u7ea7\u5c01\u88c5\u7684\u60c5\u51b5\u4e0b\u5c06\u5176\u4f7f\u7528\u5728\u4efb\u4f55\u6709\u4f9d\u5b58\u5173\u7cfb\u7684\u5730\u65b9\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u8fd9\u4e2a\u4efb\u52a1\u7ba1\u7406\u7cfb\u7edf\u56e0\u4e3a\u8fc7\u4e8e\u5e95\u5c42\uff0c\u6240\u4ee5\u51e0\u4e4e\u6ca1\u6709\u590d\u6742\u5ea6\u6d6a\u8d39\uff0c\u5728\u4e0d\u8fdb\u884c\u7cfb\u7edf\u5c42\u7ea7\u4e0a\u7684\u4f18\u5316\u7684\u60c5\u51b5\u4e0b\u6027\u80fd\u5df2\u7ecf\u975e\u5e38\u9ad8\uff0c\u5f53\u7136\u66f4\u591a\u7684\u8fd8\u53ef\u80fd\u53d6\u51b3\u4e8e\u5177\u4f53\u5b9e\u73b0\u4e0e\u5185\u5b58\u7ba1\u7406\uff0c\u4f46\u662f\u8fd9\u4e0d\u4f1a\u6709\u7406\u8bba\u590d\u6742\u5ea6\u7684\u533a\u522b\u3002<\/p>\n<h2 id=\"\u7a0b\u5e8f\u7ed3\u6784\u5206\u6790\">\u7a0b\u5e8f\u7ed3\u6784\u5206\u6790\n<\/h2><pre class=\"mermaid\" style=\"visibility:hidden\">classDiagram\n class TaskManager {\n +Instance TaskManager\n -tasks Dictionary~string, TaskNode~\n -activeTasks HashSet~TaskNode~\n -isLoadingTasks bool\n -_initGraphCoroutine Coroutine\n +isGraphInitialized bool\n +mainPlayer GameObject\n +AddTask(taskId, taskNode)\n +GetTask(taskId) TaskNode\n +RegisterActive(node)\n +UnregisterActive(node)\n +SaveAllTaskNodes()\n +LoadAllTaskNodes()\n +SaveTaskNode(ID)\n +LoadTaskNode(ID)\n +ReloadAndRestartTasks()\n +ClearAllTaskNodesForLoad()\n +RebuildGraphFromSave()\n +OnGoalReached(goal)\n +FinishAllActiveTasks()\n -InitTaskGraph() IEnumerator\n -StartAllReadyTasks()\n -DelayedStartReadyTasks() IEnumerator\n +Awake()\n }\n\n class TaskNode {\n +taskId string\n +taskName string\n +Inn int\n +Out int\n +isTaskFinished bool\n +nextNodes List~TaskNode~\n +nextNodesIds List~string~\n +taskGoals List~TaskGoal~\n +StartTask()\n +CancelTask()\n +RefreshStatus()\n +ResetForLoad()\n }\n\n class TaskGoal {\n +IsDone bool\n +targetScript\n }\n\n class GameFlowManager {\n +PlayingData PlayingData\n }\n\n class PlayingData {\n +TaskNodesDic Dictionary~string, (int, bool)~\n }\n\n TaskManager --> TaskNode : \u7ba1\u7406\n TaskManager --> GameFlowManager : \u8bfb\u5199\u5b58\u6863\n TaskNode --> TaskGoal : \u5305\u542b\n GameFlowManager --> PlayingData : \u5305\u542b<\/pre><h3 id=\"taskmanager-\u811a\u672c\">TaskManager \u811a\u672c\n<\/h3><p>\u6309\u7167 Unity \u98ce\u683c\uff0c\u6211\u4eec\u4e60\u60ef\u7528\u4e00\u4e2a\u811a\u672c\u5b9e\u73b0\u4e3a\u5355\u4f8b\uff0c\u8d1f\u8d23\u6ce8\u518c\u670d\u52a1\u548c\u4e8b\u4ef6\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u6211\u4eec\u7684 TaskManager \u811a\u672c\u3002<\/p>\n<p>\u6211\u4eec\u4f7f\u7528\u8fd9\u4e2a\u811a\u672c\u8fdb\u884c\u4efb\u52a1\u8282\u70b9\u521d\u59cb\u5316\uff0c\u8282\u70b9\u51fa\u5165\u5ea6\u7684\u7edf\u4e00\u7ba1\u7406\u8fd8\u6709\u4e00\u4e9b\u8c03\u8bd5\u529f\u80fd\u7684\u5b9e\u73b0\u3002<\/p>\n<p>\u8fd9\u4e2a\u811a\u672c\u76f8\u5f53\u4e8e\u6574\u4e2a\u7cfb\u7edf\u7684\u7ba1\u7406\u5668\u4e0e\u7edf\u4e00\u8c03\u5ea6\u5668\u3002<\/p>\n<p>\u6b64\u811a\u672c\u4e5f\u5b9e\u73b0\u4e86\u5b58\u6863\u529f\u80fd\uff0c\u8fd9\u91cd\u70b9\u662f\u4e0e\u5b58\u6863\u7cfb\u7edf\u5408\u7406\u5bf9\u63a5\u7136\u540e\u91cd\u65b0\u521d\u59cb\u5316\uff0c\u4e0d\u5728\u6b64\u8d58\u8ff0\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u4efb\u52a1\u521d\u59cb\u5316\u6d41\u7a0b\u56fe\uff1a<\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">sequenceDiagram\n participant Unity as Unity Engine\n participant TM as TaskManager\n participant Tasks as tasks Dictionary\n participant Archive as GameFlowManager.PlayingData\n\n Note over Unity: \u573a\u666f\u52a0\u8f7d\n Unity->>TM: Awake()\n TM->>TM: \u5355\u4f8b\u68c0\u67e5 + DontDestroyOnLoad\n TM->>TM: StartCoroutine(InitTaskGraph())\n \n TM->>TM: WaitForEndOfFrame x2\n Note over TM: \u786e\u4fdd\u6240\u6709 TaskNode \u5df2\u6ce8\u518c\n \n TM->>Tasks: \u904d\u5386 tasks \u5b57\u5178\n \n loop \u6bcf\u4e2a\u4efb\u52a1\n TM->>Tasks: SaveTaskNode(key) \u2190 \u521d\u59cb\u5b58\u6863\n TM->>TM: \u6784\u5efa nextNodes \u8fde\u63a5\n TM->>Tasks: targetTask.Inn++\n TM->>Tasks: taskNode.Out++\n end\n \n TM->>Archive: LoadAllTaskNodes()\n Note over TM,Archive: \u6062\u590d\u5b58\u6863\u4e2d\u7684 Inn \/ isFinished\n \n TM->>TM: isGraphInitialized = true\n \n TM->>TM: StartAllReadyTasks()\n Note over TM: \u542f\u52a8 \u5165\u5ea6\u22640 \u4e14 \u672a\u5b8c\u6210 \u7684\u4efb\u52a1<\/pre><p>\uff08\u6ce8\uff1a\u8fd9\u91cc\u7684 GameFlowManager \u662f\u6e38\u620f\u6d41\u7a0b\u7ba1\u7406\u5668\uff0c\u8fd9\u91cc\u4e3b\u8981\u8d1f\u8d23\u6e38\u620f\u6570\u636e\u7684\u5bf9\u63a5\uff09<\/p>\n<h3 id=\"tasknode-\u811a\u672c\">TaskNode \u811a\u672c\n<\/h3><p>\u8fd9\u4e2a\u811a\u672c\u5b9e\u73b0\u4e86 TaskNode \u7c7b\uff0c\u4f5c\u4e3a $\\text{DAG}$ \u7684\u8282\u70b9\u5b9e\u4f8b\u5316.<\/p>\n<p>\u7ed3\u6784\u56fe\uff1a<\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">classDiagram\n class TaskNode {\n +taskName string\n +taskId string\n +nextNodesIds List~string~\n +taskEffects List~TaskEffect~\n +taskEndEffects List~TaskEffect~\n +taskGoals List~TaskGoal~\n +nextNodes List~TaskNode~\n +Out int\n -In int\n +isTaskFinished bool\n -_taskCts CancellationTokenSource\n -isTaskRunning bool\n -isCompleting bool\n +Inn int (property)\n +Awake()\n +OnDestroy()\n +StartTask()\n +CancelTask()\n +ResetForLoad()\n +RefreshStatus()\n -OnTaskSuccess()\n -StartTaskAsync() UniTaskVoid\n +OnDrawGizmos()\n }\n\n class TaskEffect {\n +ApplyEffect()\n +RevertEffect()\n }\n\n class TaskGoal {\n +IsDone bool\n }\n\n class TaskManager {\n +AddTask()\n +SaveTaskNode()\n +RegisterActive()\n +UnregisterActive()\n +IsGraphInitialized bool\n }\n\n TaskNode --> TaskEffect : \u5305\u542b\n TaskNode --> TaskGoal : \u5305\u542b\n TaskNode --> TaskManager : \u6ce8\u518c\/\u901a\u77e5<\/pre><p>\u6211\u4eec\u5728\u8fd9\u91cc\u5b9e\u73b0\u5bf9\u4e8e\u4efb\u52a1\u8282\u70b9\u7684\u4fe1\u606f\u5b58\u50a8\uff08\u5982\uff1a\u51fa\u5ea6\uff0c\u5165\u5ea6\uff0c\u4efb\u52a1\u6548\u679c\uff0c\u4efb\u52a1\u76ee\u6807\u7b49\uff09\uff0c\u4e5f\u5b9e\u73b0\u4e86\u4efb\u52a1\u8282\u70b9\u7684\u542f\u52a8\u903b\u8f91\uff0c\u7ed3\u675f\u903b\u8f91\u3002<\/p>\n<p>\u4e3a\u4e86\u4fbf\u4e8e\u89e3\u8026\uff0c\u6211\u4eec\u7684\u4efb\u52a1\u6d41\u7a0b\u4f7f\u7528 Unitask \u5b9e\u73b0\uff0cUnitask \u662f\u4e00\u4e2a\u66f4\u4f18\u79c0\u7684\u5f02\u6b65\u5e93\uff0c\u53ef\u4ee5\u4fbf\u643a\u5730\u5bf9\u5f02\u6b65\u51fd\u6570\u8fdb\u884c\u53d6\u6d88\uff0c\u5f02\u5e38\u5904\u7406\u7b49\u64cd\u4f5c\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f TaskNode \u5bf9\u8c61\u7684\u751f\u547d\u5468\u671f\u6d41\u7a0b\u56fe\uff1a<\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">stateDiagram-v2\n [*] --> \u672a\u6ce8\u518c: \u5bf9\u8c61\u5b9e\u4f8b\u5316\n \u672a\u6ce8\u518c --> \u5df2\u6ce8\u518c: Awake()<br\/>TaskManager.AddTask()\n \u5df2\u6ce8\u518c --> \u7b49\u5f85\u4e2d: InitTaskGraph<br\/>\u5165\u5ea6 > 0\n \n \u7b49\u5f85\u4e2d --> \u8fd0\u884c\u4e2d: Inn--<br\/>Inn \u2264 0 && \u672a\u5b8c\u6210\n \u5df2\u6ce8\u518c --> \u8fd0\u884c\u4e2d: StartAllReadyTasks()<br\/>Inn \u2264 0 && \u672a\u5b8c\u6210\n \n \u8fd0\u884c\u4e2d --> \u5df2\u5b8c\u6210: RefreshStatus()<br\/>\u5168\u90e8 Goal.IsDone == true\n \u8fd0\u884c\u4e2d --> \u5df2\u53d6\u6d88: CancelTask()<br\/>(\u8bfb\u6863\/\u573a\u666f\u5207\u6362)\n \n \u5df2\u5b8c\u6210 --> [*]: OnTaskSuccess()<br\/>\u4fdd\u5b58\u5b58\u6863 + \u901a\u77e5\u540e\u7ee7\n \n \u5df2\u53d6\u6d88 --> \u5df2\u6ce8\u518c: ResetForLoad()<br\/>(\u8bfb\u6863\u8c03\u7528)\n \n state \u8fd0\u884c\u4e2d {\n [*] --> \u5e94\u7528\u5f00\u59cb\u6548\u679c: ApplyEffect()\n \u5e94\u7528\u5f00\u59cb\u6548\u679c --> \u8f6e\u8be2\u68c0\u67e5: RefreshStatus()\n \u8f6e\u8be2\u68c0\u67e5 --> \u5df2\u5b8c\u6210: \u5168\u90e8\u5b8c\u6210\n \u8f6e\u8be2\u68c0\u67e5 --> \u7ee7\u7eed\u7b49\u5f85: \u672a\u5b8c\u6210\n \u7ee7\u7eed\u7b49\u5f85 --> \u8f6e\u8be2\u68c0\u67e5: UniTask.Delay(250ms)\n }<\/pre><p>\u4ee5\u4e0b\u662f TaskNode \u7684\u8fd0\u884c\u903b\u8f91\u6d41\u7a0b\u56fe\uff1a<\/p>\n<pre class=\"mermaid\" style=\"visibility:hidden\">sequenceDiagram\n participant Caller as \u5916\u90e8\/Inn Setter\n participant TN as TaskNode\n participant TM as TaskManager\n participant Effects as TaskEffects\n participant Goals as TaskGoals\n\n Caller->>TN: StartTask()\n TN->>TN: CancelTask() (\u6e05\u7406\u65e7\u4efb\u52a1)\n TN->>TN: \u521b\u5efa\u65b0 CancellationTokenSource\n TN->>TN: isTaskRunning = true\n TN->>TM: RegisterActive(this)\n\n Note over TN: StartTaskAsync() \u5f00\u59cb\n\n TN->>Effects: ApplyEffect() (\u5f00\u59cb\u6548\u679c)\n\n TN->>TN: RefreshStatus() (\u521d\u59cb\u68c0\u67e5)\n \n loop \u6bcf 250ms\n TN->>Goals: \u904d\u5386\u68c0\u67e5 IsDone\n alt \u5168\u90e8\u5b8c\u6210\n TN->>TN: OnTaskSuccess()\n else \u672a\u5b8c\u6210\n TN->>TN: UniTask.Delay(250ms)\n end\n end\n\n Note over TN: OnTaskSuccess() \u89e6\u53d1\n\n TN->>TM: SaveTaskNode(taskId)\n TN->>Effects: RevertEffect() (\u8fd8\u539f\u5f00\u59cb\u6548\u679c)\n TN->>Effects: ApplyEffect() (\u5e94\u7528\u7ed3\u675f\u6548\u679c)\n \n loop \u6bcf\u4e2a\u540e\u7ee7\u8282\u70b9\n TN->>TN.nextNodes: node.Inn-- (\u901a\u77e5\u540e\u7ee7)\n end\n \n TN->>TM: UnregisterActive(this)\n TN->>TN: CancelTask() (\u505c\u6b62\u5f02\u6b65)\n TN->>TN: isTaskRunning = false<\/pre><h3 id=\"taskeffecttaskgoaltaskbasic-\u811a\u672c\">TaskEffect,TaskGoal,TaskBasic \u811a\u672c\n<\/h3><p>TaskEffect \u548c TaskGoal \u811a\u672c\u90fd\u662f\u4f5c\u4e3a\u7eaf\u7cb9\u7684\u6570\u636e\u7c7b\u5b58\u5728\uff0c\u4e3a\u4e86\u53ef\u4ee5\u5728 Inspector \u4e2d\u5e8f\u5217\u5316\u65b9\u4fbf\u914d\u7f6e\u800c\u5b58\u5728\u3002<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e24\u4e2a\u811a\u672c\u90fd\u5f3a\u70c8\u8ddf\u6e38\u620f\u7684\u6570\u636e\u7ba1\u7406\u7cfb\u7edf\u7ed3\u5408\uff0c\u6240\u4ee5\u5e76\u65e0\u5f88\u5927\u7684\u53c2\u8003\u4ef7\u503c\u3002<\/p>\n<p>\u800c TaskBasic \u5219\u662f\u4e3a\u4e86\u81ea\u5b9a\u4e49 TaskGoal \u548c TaskEffect \u800c\u5b58\u5728\u7684\u57fa\u7c7b\uff0cTaskBasic \u4e2d\u5b9a\u4e49\u4e86\u81ea\u5b9a\u4e49\u811a\u672c\u7684\u57fa\u672c\u5b9e\u73b0\u89c4\u5219\u548c\u5c5e\u6027\uff0c\u786e\u4fdd\u81ea\u5b9a\u4e49\u811a\u672c\u5b9e\u73b0\u65b9\u4fbf\u5e76\u4e14\u4f7f\u7528\u5b89\u5168\u3002<\/p>\n<h2 id=\"\u9644\u5f55\">\u9644\u5f55\n<\/h2><p><a class=\"link\" href=\"https:\/\/rechenz.github.io\/code\/TaskBasic.cs\" >TaskManager<\/a><\/p>\n<p><a class=\"link\" href=\"https:\/\/rechenz.github.io\/code\/TaskNode.cs\" >TaskNode<\/a><\/p>\n<p><a class=\"link\" href=\"https:\/\/rechenz.github.io\/code\/TaskEffect.cs\" >TaskEffect<\/a><\/p>\n<p><a class=\"link\" href=\"https:\/\/rechenz.github.io\/code\/TaskGoal.cs\" >TaskGoal<\/a><\/p>\n<p><a class=\"link\" href=\"https:\/\/rechenz.github.io\/code\/TaskBasic.cs\" >TaskBasic<\/a><\/p>"},{"title":"cs224n\u5b66\u4e60\u7b14\u8bb0","link":"https:\/\/rechenz.github.io\/post\/cs224n%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","pubDate":"Sun, 18 Jan 2026 23:02:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/cs224n%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","description":"<h1 id=\"cs224n\u5b66\u4e60\u7b14\u8bb0\">cs224n\u5b66\u4e60\u7b14\u8bb0\n<\/h1><h2 id=\"\u8bcd\u5d4c\u5165\">\u8bcd\u5d4c\u5165\n<\/h2><p>\u6211\u4eec\u5b66\u4e60\u8fc7 cs231n\uff0c\u4e86\u89e3\u4e86\u795e\u7ecf\u7f51\u7edc\u7684\u672c\u8d28\u662f\u5c06\u6570\u636e\u8fdb\u884c\u7ebf\u6027\u53d8\u6362\u4e3a\u6211\u4eec\u6240\u9700\u8981\u7684\u6570\u636e\u6a21\u5f0f\uff08\u5982\u5206\u7c7b\u7b49\u7b49\uff09\u3002<\/p>\n<p>\u4f46\u662f\u5728\u81ea\u7136\u8bed\u8a00\u5904\u7406\u8fd9\u4e2a\u9886\u57df\uff0c\u6211\u4eec\u7684\u8bed\u8a00\u96be\u4ee5\u76f4\u63a5\u88ab\u8ba1\u7b97\u673a\u6240\u7406\u89e3\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5bf9\u6211\u4eec\u7684\u8bed\u8a00\u8fdb\u884c\u7f16\u7801\uff0c\u6ce8\u610f\u8fd9\u91cc\u7684\u7f16\u7801\u5e76\u4e0d\u662f\u50cfunicode\u90a3\u6837\u65e0\u5e8f\u7f16\u7801\uff0c\u800c\u662f\u4e3a\u4e86\u8ba9\u8ba1\u7b97\u673a\u201c\u7406\u89e3\u201d\u8bcd\u610f\u800c\u7f16\u7801\uff0c\u6240\u4ee5\u5728\u8fd9\u91cc\u5f15\u5165\u8bcd\u5d4c\u5165\u65b9\u6cd5\uff08PS:\u8bcd\u5d4c\u5165\u5728\u4e4b\u540e\u7684 transformer \u4e2d\u4ecd\u7136\u6709\u4e00\u5e2d\u4e4b\u5730\uff09<\/p>\n<p>\u8bcd\u5d4c\u5165\u5176\u5b9e\u4e5f\u662f\u6a21\u578b\u7684\u4e00\u4e2a\u5b66\u4e60\u9636\u6bb5\uff0c\u62ff\u73b0\u5b9e\u6765\u4e3e\u4e00\u4e2a\u4f8b\u5b50\uff0c\u6211\u4eec\u5b66\u4e60\u8bed\u8a00\u7684\u65f6\u5019\uff0c\u901a\u8fc7\u7406\u89e3\u5355\u8bcd\u7684\u5b9e\u9645\u610f\u4e49\u6765\u5b66\u4e60\uff0c\u8bcd\u5d4c\u5165\u7c7b\u4f3c\uff0c\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\u8ba9\u8ba1\u7b97\u673a\u901a\u8fc7\u4e94\u611f\u6765\u7406\u89e3\u8bcd\u4e49\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u76f8\u540c\u6216\u8005\u6709\u7c7b\u4f3c\u8bcd\u4e49\u7684\u5355\u8bcd\u8fdb\u884c\u5206\u7c7b\uff0c\u6240\u4ee5\u6bcf\u4e2a\u5355\u8bcd\u5bf9\u4e8e\u8ba1\u7b97\u673a\u6765\u8bf4\u90fd\u662f\u62bd\u8c61\u6982\u5ff5\uff0c\u6211\u4eec\u5c06\u5728\u4e4b\u540e\u7684\u8bad\u7ec3\u4e2d\u8ba9\u5404\u79cd\u62bd\u8c61\u6982\u5ff5\u76f8\u4e92\u4f9d\u5b58\u3001\u8fde\u63a5\u3002<\/p>\n<p>\u8bcd\u5d4c\u5165\u7684\u5b9e\u9645\u64cd\u4f5c\u975e\u5e38\u7b80\u5355\uff0ccs224n_a1 \u5df2\u7ecf\u6709\u8be6\u7ec6\u7684\u6b65\u9aa4\u62c6\u5206\uff0c\u8fd9\u91cc\u4e0d\u505a\u8d58\u8ff0\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\u8bcd\u5d4c\u5165\u662f\u5c06\u8bed\u8a00\u7684\u7f16\u7801\u7684\u91cd\u8981\u5de5\u5177\u5373\u53ef\u3002<\/p>\n<h2 id=\"\u4f9d\u5b58\u53e5\u6cd5\u5206\u6790\u5668\">\u4f9d\u5b58\u53e5\u6cd5\u5206\u6790\u5668\n<\/h2><p>\u8fd9\u4e2a\u6a21\u5757\u7684\u529f\u80fd\u5728 Transformer \u4e2d\u4f1a\u96c6\u6210\u5728\u6ce8\u610f\u529b\u673a\u5236\u4e2d\uff0c\u4f46\u662f\u5b66\u4e60\u8fd9\u4e2a\u6a21\u5757\u8fd9\u662f\u6211\u4eec\u7406\u89e3\u8bed\u8a00\u5206\u6790\u7684\u4e00\u4e2a\u91cd\u8981\u9636\u6bb5\u3002<\/p>\n<p>\u5728\u4e0a\u6587\u6211\u4eec\u63d0\u5230\u8fc7\u8ba1\u7b97\u673a\u6240\u7406\u89e3\u7684\u6982\u5ff5\u90fd\u662f\u62bd\u8c61\u7684\uff0c\u4f46\u662f\u4eba\u4eec\u7684\u8bed\u8a00\u4f1a\u6709\u7740\u4e0d\u540c\u7684\u98ce\u683c\u3001\u6b67\u4e49\u751a\u81f3\u662f\u8bed\u6cd5\u9519\u8bef\uff0c\u4e3a\u4e86\u8ba9\u8ba1\u7b97\u673a\u4f9d\u7136\u80fd\u201c\u770b\u61c2\u201d\u6211\u4eec\u7684\u8bed\u8a00\uff0c\u4fbf\u6709\u4e86\u8fd9\u4e2a\u6a21\u5757\u3002<\/p>\n<p>\u8fd9\u4e2a\u6a21\u5757\u5c06\u6211\u4eec\u7684\u8bed\u8a00\u62c6\u5206\u4e3a\u6700\u7b80\u5355\u7684\u6811\u5f62\u7ed3\u6784\uff0c\u8ba9\u8ba1\u7b97\u673a\u7406\u89e3\u8d77\u6765\u4e0d\u4f1a\u6709\u6b67\u4e49\u3002<\/p>\n<p>\u90a3\u4e48\u73b0\u5728\u7684\u95ee\u9898\u6765\u5230\u4e86\u600e\u4e48\u5408\u7406\u62c6\u5206\u6784\u9020\u6211\u4eec\u7684\u6811\u5f62\u7ed3\u6784\uff0c\u9996\u5148\u4e0d\u540c\u7684\u8bed\u8a00\u6709\u4e0d\u540c\u7684\u8bed\u6cd5\u89c4\u8303\uff0c\u5176\u6b21\u6211\u4eec\u8981\u5bf9\u8fd9\u4e2a\u4f9d\u5b58\u53e5\u6cd5\u5206\u6790\u5668\u8fdb\u884c\u8bad\u7ec3\uff0c\u8ba9\u5176\u80fd\u5408\u7406\u5730\u5904\u7406\u4efb\u4f55\u53e5\u5b50\u3002<\/p>\n<p>\u5728 cs224n \u4e2d\u6211\u4eec\u91c7\u7528\u795e\u7ecf\u7f51\u7edc\u5bf9\u5176\u8fdb\u884c\u8bad\u7ec3\uff0c\u5e76\u4e14\u4f7f\u7528 pytorch \u51cf\u5c11\u4ee3\u7801\u96be\u5ea6\uff0c\u5199\u8d77\u6765\u5176\u5b9e\u6ca1\u591a\u5c11\u4e1c\u897f\u3002<\/p>\n<h2 id=\"\u795e\u7ecf\u673a\u5668\u7ffb\u8bd1\">\u795e\u7ecf\u673a\u5668\u7ffb\u8bd1\n<\/h2><p>\u8fd9\u90e8\u5206\u7684\u4ee3\u7801\u5b9e\u5728\u662f\u592a\u4e71\u4e86\uff0c\u6211\u6309\u7167\u81ea\u5df1\u7684\u7406\u89e3\u8fdb\u884c\u8bb2\u89e3\uff0c\u5982\u679c\u6709\u9519\u8bef\u8bf7\u8054\u7cfb\u6211\u6539\u6b63\u3002<\/p>\n<p>\u5728\u8fd9\u91cc\u6211\u4eec\u5f15\u5165\u4e86\u6ce8\u610f\u529b\u673a\u5236\u548c LSTM \u67b6\u6784\uff0c\u90a3\u4e48\u6211\u4eec\u6240\u9700\u8bad\u7ec3\u7684\u77e9\u9635\u6570\u4fbf\u6d89\u53ca\u4e86\u6ce8\u610f\u529b\u673a\u5236\u7684\u6ce8\u610f\u529b\u6a21\u5757\u548cLSTM\u7684\u9057\u5fd8\u95e8\u3001\u8f93\u5165\u95e8\u3001\u8f93\u51fa\u95e8\u3002<\/p>\n<p>\u5728\u7b14\u8bb0\u4e2d\u6211\u4eec\u53ea\u901a\u8fc7\u62bd\u8c61\u6982\u5ff5\u6765\u7406\u89e3\uff0c\u5e76\u4e0d\u4f1a\u8bf4\u660e\u5177\u4f53\u4ee3\u7801\u5b9e\u73b0\u3002<\/p>\n<p>LSTM\uff08\u957f\u77ed\u671f\u8bb0\u5fc6\u7f51\u7edc\uff09\u662f\u4e3a\u4e86\u89e3\u51b3\u957f\u5bf9\u8bdd\u7684\u7406\u89e3\u800c\u8bde\u751f\u7684\uff0c\u4e3b\u8981\u6a21\u5757\u6709\u9057\u5fd8\u95e8\u3001\u8f93\u5165\u95e8\u3001\u8f93\u51fa\u95e8\u3002<\/p>\n<p>\u9057\u5fd8\u95e8\u662f\u89e3\u51b3\u8fc7\u8fdc\u7684\u8bb0\u5fc6\uff0c\u4f18\u5316\u6027\u80fd\u4e14\u9632\u6b62\u8fc7\u4e45\u8bb0\u5fc6\u3002<\/p>\n<p>\u8f93\u5165\u95e8\u4fbf\u662f\u5bf9\u67d0\u4e9b\u6570\u636e\u8fdb\u884c\u8bb0\u5fc6\u3002<\/p>\n<p>\u8f93\u51fa\u95e8\u4fbf\u662f\u5bf9\u73b0\u6709\u7684\u8bb0\u5fc6\u8fdb\u884c\u7f16\u7801\uff0c\u800c\u540e\u4f20\u5bfc\u5230\u4e0b\u4e00\u4e2a\u5faa\u73af\u3002<\/p>\n<p>\u90a3\u4e48\u6211\u4eec\u73b0\u5728\u53d1\u73b0\u4e86\u4e00\u4e2a\u95ee\u9898\uff0c\u5982\u679c\u771f\u7684\u6709\u4e00\u4e2a\u95ee\u9898\u9700\u8981\u6211\u4eec\u957f\u4e45\u8bb0\u5fc6\u600e\u4e48\u529e\uff0c\u6211\u4eec\u7684\u9057\u5fd8\u95e8\u5728\u6bcf\u4e00\u6b21\u5faa\u73af\u90fd\u4f1a\u6309\u7167\u65f6\u95f4\u6b65\u5bf9\u4e4b\u524d\u7684\u6743\u91cd\u8fdb\u884c\u524a\u51cf\uff0c\u90a3\u4e48\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u6ce8\u610f\u529b\u673a\u5236\uff0c\u6211\u4eec\u5728\u9057\u5fd8\u4e4b\u524d\u5bf9\u539f\u59cb\u6570\u636e\u8fdb\u884c\u6ce8\u610f\u529b\u673a\u5236\u7684\u5e94\u7528\uff0c\u4ee4\u8d85\u957f\u671f\u8bb0\u5fc6\u6210\u4e3a\u53ef\u80fd\u3002<\/p>\n<p>\u6ce8\u610f\u8fd9\u91cc\u7684\u6ce8\u610f\u529b\u673a\u5236\u548c Transformer \u4e2d\u7684\u81ea\u6ce8\u610f\u529b\u673a\u5236\u6709\u6240\u4e0d\u540c\uff0c\u8fd9\u91cc\u7684\u6ce8\u610f\u529b\u673a\u5236\u53ea\u4f1a\u544a\u8bc9\u6a21\u578b\u5e94\u8be5\u6ce8\u610f\u524d\u6587\u7684\u67d0\u67d0\u65b9\u9762\uff0c\u800c\u4e0d\u4f1a\u5206\u6790\u66f4\u591a\u3002<\/p>\n<p>\u8fd9\u90e8\u5206\u7684\u5b9e\u73b0\u53d8\u5f97\u66f4\u4e3a\u62bd\u8c61\uff0c\u4f46\u662f\u6211\u4eec\u8981\u660e\u786e\u4e00\u70b9\uff0c\u5c31\u50cf\u4e0a\u6587\u63d0\u5230\u7684\uff0c\u8ba1\u7b97\u673a\u6240\u6709\u70b9\u4e00\u5207\u6982\u5ff5\u90fd\u662f\u6570\u5b57\uff0c\u90fd\u662f\u62bd\u8c61\u7684\uff0c\u6211\u4eec\u4e3a\u6a21\u578b\u5b9e\u73b0\u4efb\u4f55\u7684\u6a21\u5757\u53ea\u662f\u63d0\u4f9b\u4e86\u6a21\u578b\u5206\u6790\u67d0\u4e2a\u65b9\u9762\u7684\u529f\u80fd\uff0c\u5177\u4f53\u7684\u6a21\u5757\u95f4\u7684\u5d4c\u5408\u6027\u4ee5\u53ca\u90a3\u4e9b\u77e9\u9635\u6743\u91cd\u6570\u636e\u7684\u5b9e\u9645\u90fd\u4e0d\u662f\u6211\u4eec\u9700\u8981\u8003\u8651\u7684\uff0c\u8fd9\u4e9b\u95ee\u9898\u4f1a\u5728\u5b9e\u9645\u6570\u636e\u7684\u8bad\u7ec3\u4e2d\u8fdb\u884c\u81ea\u62df\u5408\uff0c\u8fd9\u4e5f\u63d0\u4f9b\u4e86\u4e00\u4e2a\u77e5\u8bc6\u70b9\u4fbf\u662f\u6211\u4eec\u4e0d\u80fd\u5c06\u67d0\u4e00\u6a21\u5757\u7684\u6743\u91cd\u5355\u72ec\u62ff\u51fa\u6765\u653e\u5728\u53e6\u4e00\u4e2a\u6a21\u578b\u4e0a\uff0c\u8fd9\u662f\u4e0d\u5408\u7406\u7684\u3002<\/p>\n<h2 id=\"attention-is-all-you-need\">Attention is All You Need\n<\/h2><p>Transformer \u7684\u77e5\u8bc6\u70b9\u5f88\u591a\uff0c\u6211\u4eec\u6309\u7167\u67b6\u6784\u6570\u636e\u5904\u7406\u4e3b\u8981\u6a21\u5757\u6765\u8bb2\u89e3\u3002<\/p>\n<h3 id=\"\u81ea\u6ce8\u610f\u529b\u673a\u5236\">\u81ea\u6ce8\u610f\u529b\u673a\u5236\n<\/h3><p>\u8fd9\u662f Transformer \u67b6\u6784\u6700\u5177\u6709\u9769\u547d\u6027\u7684\u6a21\u5757\u3002<\/p>\n<p>\u9996\u5148\u4ece\u5355\u4e00\u81ea\u6ce8\u610f\u529b\u5165\u624b\uff0c\u8fd9\u91cc\u6211\u4eec\u5c06\u4e3a\u6bcf\u4e00\u4e2a\u8bcd\u5143\uff08\u8fd9\u4e2a\u5f85\u4f1a\u89e3\u91ca\uff09\u8bbe\u7f6e\u4e09\u4e2a\u952e\u503c\uff0c\u5206\u522b\u4e3a\u67e5\u8be2\u952e\u503cQ\uff0c\u81ea\u8eab\u952e\u503cK\uff0c\u672c\u8d28\u952e\u503cV\uff0c\u8fd9\u4fbf\u662f\u81ea\u6ce8\u610f\u673a\u5236\u8981\u5b66\u4e60\u7684\u4e09\u4e2a\u4e3b\u8981\u53c2\u6570\uff0c\u8fd9\u91cc\u5f15\u7528\u4e00\u4e0bdeepseek\u7ed9\u6211\u7684\u4f8b\u5b50<\/p>\n\n <blockquote>\n <ul>\n<li><strong>\u67e5\u8be2 Q<\/strong> \uff1a\u6bcf\u4e2a\u8bcd\u53d1\u51fa\u7684&quot;\u95ee\u9898&quot;\uff1a\u6211\u8be5\u5173\u6ce8\u8c01\uff1f<\/li>\n<li><strong>\u952e K<\/strong> \uff1a\u6bcf\u4e2a\u8bcd\u63d0\u4f9b\u7684&quot;\u7b54\u6848&quot;\uff1a\u6211\u6709\u4ec0\u4e48\u7279\u70b9\u503c\u5f97\u5173\u6ce8\uff1f<\/li>\n<li><strong>\u503c V<\/strong> \uff1a\u6bcf\u4e2a\u8bcd\u7684&quot;\u672c\u8d28\u5185\u5bb9&quot;\uff0c\u5c06\u88ab\u52a0\u6743\u6c42\u548c<\/li>\n<\/ul>\n\n <\/blockquote>\n<p>\u4e4b\u540e\u6211\u4eec\u4fbf\u8981\u8ba1\u7b97\u6ce8\u610f\u529b\u5206\u6570\uff0c\u8ba1\u7b97\u65b9\u6cd5\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6211\u4eec\u7684\u6ce8\u610f\u529b\u5206\u6570\u4ee3\u8868\u4e86\u6211\u4eec\u5bf9\u8fd9\u4e2a\u8bcd\u7684\u5173\u6ce8\u5ea6\u3002<\/p>\n<p>\u4f46\u662f\u8003\u8651\u5230\u5bf9\u8bed\u8a00\u5206\u6790\u4e0d\u591f\u5168\u9762\uff0c\u5e76\u4e14\u8054\u60f3\u5230\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u4e2d\u5377\u79ef\u6838\u7684\u6982\u5ff5\uff0c\u6211\u4eec\u4fbf\u5f15\u5165\u4e86\u591a\u5934\u6ce8\u610f\u529b\u673a\u5236\uff0c\u672c\u8d28\u662f\u5bf9\u539f\u672c\u7684\u5355\u4e00\u81ea\u6ce8\u610f\u529b\u673a\u5236\u7684\u4e09\u4e2a\u952e\u503c\u8fdb\u884c\u62c6\u89e3\uff0c\u62c6\u6210 3$\\times$N \u4e2a\u952e\u503c\uff08\u8bbe\u6709N\u4e2a\u5934\uff09\uff0c\u4e4b\u540e\u5bf9\u6240\u6709\u7684\u5934\u8fdb\u884c\u6574\u5408\u5373\u53ef\u3002<\/p>\n<h3 id=\"\u524d\u9988\u795e\u7ecf\u7f51\u7edcffn\">\u524d\u9988\u795e\u7ecf\u7f51\u7edc\uff08FFN\uff09\n<\/h3><p>\u8fd9\u662f Transformer \u4e2d\u5f88\u6709\u8da3\u7684\u4e00\u90e8\u5206\uff0c\u6b63\u5982\u6211\u4e0a\u6587\u8bf4\u7684\uff0c\u6211\u4eec\u5b9e\u73b0\u7684\u6bcf\u4e00\u4e2a\u6a21\u5757\u90fd\u662f\u4e3a\u4e86\u63d0\u4f9b\u7ed9\u6a21\u578b\u5b66\u4e60\u7684\u80fd\u529b\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7684\u529f\u80fd\u3002<\/p>\n<p>\u524d\u9988\u795e\u7ecf\u7f51\u7edc\u4e3a\u6a21\u578b\u63d0\u4f9b\u4e86\u5b66\u4e60\u66f4\u590d\u6742\u7279\u5f81\u7684\u80fd\u529b\uff0c\u56e0\u4e3aFFN\u5c06\u4f20\u7edf\u795e\u7ecf\u7f51\u7edc\u7684\u7ebf\u6027\u53d8\u6362\u66ff\u6362\u4e3a\u4e86\u975e\u7ebf\u6027\u53d8\u6362<\/p>\n<p>$$\n\\text{FFN}(\\mathbf{x}) = \\sigma(\\mathbf{x}\\mathbf{W}_1 + \\mathbf{b}_1)\\mathbf{W}_2 + \\mathbf{b}_2\n$$<\/p>\n<p>\u6839\u636e\u6570\u5b66\u5b9a\u7406\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\u8fd9\u79cd\u5f62\u5f0f\u7684\u53d8\u6362\u53ef\u4ee5\u903c\u8fd1\u4efb\u4f55\u7684\u8fde\u7eed\u51fd\u6570\uff0c\u8fd9\u63d0\u4f9b\u4e86 FFN \u5f3a\u5927\u7684\u5b66\u4e60\u5206\u6790\u80fd\u529b\u3002<\/p>\n<h3 id=\"\u6b8b\u5dee\u8fde\u63a5\u4e0e\u5c42\u5f52\u4e00\u5316\">\u6b8b\u5dee\u8fde\u63a5\u4e0e\u5c42\u5f52\u4e00\u5316\n<\/h3><p>\u8fd9\u5176\u5b9e\u4e0d\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u6a21\u5757\uff0c\u4f46\u662f\u8fd9\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u5c0f\u4f18\u5316\u3002<\/p>\n<p>\u5728\u6211\u4eec\u521a\u521a\u63a5\u89e6\u795e\u7ecf\u7f51\u7edc\u65f6\u4fbf\u77e5\u9053\u5b66\u4e60\u7684\u5b9e\u9645\u4fbf\u662f\u901a\u8fc7\u53cd\u5411\u4f20\u64ad\u4e0d\u65ad\u4f18\u5316\u6211\u4eec\u7684\u5404\u79cd\u77e9\u9635\u8d85\u53c2\u6570\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u9700\u8981\u6df1\u5ea6\u5b66\u4e60\uff0c\u6211\u4eec\u4fbf\u9700\u8981\u589e\u52a0\u5c42\u6570\uff0c\u90a3\u4e48\u6211\u4eec\u4f1a\u9047\u5230\u6570\u5b66\u4e0a\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u68af\u5ea6\u6d88\u5931\u6216\u65e0\u6548\u5b66\u4e60\uff0c\u90a3\u4e48\u6211\u4eec\u4fbf\u8981\u5f15\u5165\u6b8b\u5dee\u8fde\u63a5\u8fd9\u4e2a\u6a21\u5757\u3002<\/p>\n<p>\u8bf4\u76f4\u767d\u4e00\u70b9\uff0c\u8fd9\u4e2a\u6a21\u5757\u5176\u5b9e\u5c31\u662f\u5c06\u6211\u4eec\u7684\u8f93\u51fa\u6743\u91cd\u4e0e\u539f\u59cb\u6743\u91cd\u52a0\u5728\u4e00\u8d77\uff0c\u8fd9\u9632\u6b62\u4e86\u67d0\u4e00\u53c2\u6570\u5b66\u7740\u5b66\u7740\u6ca1\u4e86\uff0c\u4e5f\u9632\u6b62\u4e86\u8fc7\u4e8e\u6fc0\u8fdb\u7684\u53d8\u6362\u3002<\/p>\n<p>\u4f46\u662f\u6211\u4eec\u53c8\u53d1\u73b0\uff0c\u5355\u7eaf\u76f8\u52a0\u4e4b\u540e\u53c8\u4f1a\u8fc7\u4e8e\u7834\u574f\u6211\u4eec\u539f\u672c\u7684\u77e9\u9635\uff0c\u751a\u81f3\u5bfc\u81f4\u8d8a\u52a0\u8d8a\u5927\u96be\u4ee5\u8ba1\u7b97\uff0c\u6240\u4ee5\u6211\u4eec\u5f15\u5165\u4e86\u5c42\u5f52\u4e00\u5316\uff08LayerNormalization\uff09\u6765\u8fdb\u884c\u201c\u8fd8\u539f\u201d\u64cd\u4f5c\u3002<\/p>\n<p>\u611f\u6027\u7406\u89e3\u4e00\u4e0b\uff0c\u6211\u8ba4\u4e3a\u8fd9\u4e2a\u6a21\u5757\u4ee4\u6211\u4eec\u7684 Transformer \u53d8\u5f97\u4f18\u96c5\u3002<\/p>\n<h3 id=\"\u81ea\u7136\u8bed\u8a00\u6587\u672c\u751f\u6210\u5668\">\u81ea\u7136\u8bed\u8a00\u6587\u672c\u751f\u6210\u5668\n<\/h3><p>\u6ce8\u610f\u8fd9\u91cc\u6211\u5e76\u4e0d\u662f\u5728\u8bb2\u89e3\u6574\u4e2a\u89e3\u7801\u5668\uff0c\u6211\u76f8\u4fe1\u7406\u89e3\u4e0a\u8ff0\u6a21\u5757\u540e\u5df2\u7ecf\u53ef\u4ee5\u7406\u89e3\u7f16\u7801\u5668\uff0c\u800c\u89e3\u7801\u5668\u9700\u8981\u751f\u6210\u81ea\u7136\u8bed\u8a00\uff0c\u6211\u66fe\u5728\u8fd9\u90e8\u5206\u7591\u60d1\u8fc7\uff0c\u6240\u4ee5\u5355\u72ec\u62ff\u51fa\u6765\u8bb2\u89e3\u3002<\/p>\n<p>\u5728Transformer\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u81ea\u56de\u5f52\u89e3\u7801\u5668\uff0c\u89e3\u7801\u5668\u901a\u8fc7\u7406\u89e3\u4e0a\u6587\u751f\u6210\u9884\u6d4b\u8bcd\u5411\u91cf\uff0c\u7136\u540e\u901a\u8fc7\u675f\u641c\u7d22\u8fdb\u884c\u8bcd\u6c47\u9884\u6d4b\u3002<\/p>\n<p>\u90a3\u4e48\u4ec0\u4e48\u662f\u675f\u641c\u7d22\uff1f<\/p>\n<p>\u6211\u4eec\u6765\u56de\u987e\u4e00\u4e0b\u6211\u4eec\u7684\u8d77\u70b9\u2014\u2014knn\u7b97\u6cd5\uff0c\u6211\u4eec\u67e5\u627e\u524dk\u4e2a\u76f8\u4f3c\u7684\u56fe\u50cf\uff0c\u675f\u641c\u7d22\u4e0e\u6b64\u7c7b\u4f3c\u3002<\/p>\n<p>\u675f\u641c\u7d22\u641c\u7d22k\u524d\u76f8\u4f3c\uff0c\u800c\u540e\u518d\u6bcf\u4e2a\u76f8\u4f3c\u540e\u518d\u641c\u7d22k\u524d\u76f8\u4f3c\uff0c\u5728\u4e00\u5b9a\u5faa\u73af\u540e\u9009\u62e9\u5f97\u5206\uff08\u6982\u7387\uff09\u6700\u5927\u7684\u8bcd\u5217\u3002<\/p>\n<p>\u8fd9\u79cd\u65b9\u6cd5\u6709\u4e9b\u4e11\u964b\uff0c\u4e8e\u662f\u6709\u4e86\u8bb8\u591a\u526a\u679d\u548c\u4f18\u5316\u65b9\u6cd5\uff0c\u5728\u8fd9\u91cc\u4e0d\u8fc7\u591a\u8d58\u8ff0\u3002<\/p>\n<h2 id=\"\u8865\u5145\u89e3\u91ca\">\u8865\u5145\u89e3\u91ca\n<\/h2><ol>\n<li>\u8bcd\u5143\uff1a\u5728\u751f\u6210\u5f0f\u4eba\u5de5\u667a\u80fd\u5bfc\u8bba\u4e2d\uff0c\u6211\u4eec\u77e5\u9053chatGPT\u5e76\u4e0d\u662f\u4ee5\u6bcf\u4e2a\u5355\u8bcd\u8fdb\u884c\u7f16\u7801\uff0c\u800c\u662f\u5206\u4e3a\u82e5\u5e72\u8bcd\u5143\uff0c\u6bd4\u5982\u4e00\u4e2a\u8bcd\u53ef\u4ee5\u7531\u8bb8\u591a\u8bcd\u5143\u6784\u6210\uff0c\u6545\u6b64\u5728\u4e0a\u6587\u4f7f\u7528\u8bcd\u5143\u6982\u5ff5<\/li>\n<\/ol>"},{"title":"\u57fa\u7840\u795e\u7ecf\u7f51\u7edc\u5b66\u4e60\u7b14\u8bb0","link":"https:\/\/rechenz.github.io\/post\/%E5%9F%BA%E7%A1%80%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","pubDate":"Sun, 02 Nov 2025 19:23:40 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%9F%BA%E7%A1%80%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","description":"<p>\u6211\u731c\u6d4b\u53ef\u80fd\u4f1a\u6709\u5f88\u591a\u4eba\u8ddf\u6211\u4e00\u6837\uff0c\u5728\u5b66\u5b8ccs231n\u540e\u4ecd\u7136\u5bf9\u795e\u7ecf\u7f51\u7edc\u6ca1\u6709\u4e00\u4e2a\u6574\u4f53\u5370\u8c61\uff0c\u6240\u4ee5\u8fd9\u662f\u4e00\u4efd\u4e3a\u540e\u4eba\u80fd\u66f4\u8f7b\u677e\u5730\u7406\u89e3\u795e\u7ecf\u7f51\u7edc\u800c\u7f16\u5199\u7684\u5b66\u4e60\u7b14\u8bb0\uff0c\u672c\u6587\u901a\u8fc7\u6211\u81ea\u5df1\u7684\u7406\u89e3\u5bf9\u4e00\u4efd\u795e\u7ecf\u7f51\u7edc\u4ee3\u7801\u8fdb\u884c\u89e3\u91ca\uff0c\u5c06\u6240\u6709\u7684\u77e5\u8bc6\u70b9\u4e32\u8054\u8d77\u6765\uff0c\u5e0c\u671b\u53ef\u4ee5\u9020\u798f\u540e\u4eba\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-python\" data-lang=\"python\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> numpy <span style=\"color:#66d9ef\">as<\/span> np\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">unpickle<\/span>(file):\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">import<\/span> pickle\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">with<\/span> open(file, <span style=\"color:#e6db74\">&#39;rb&#39;<\/span>) <span style=\"color:#66d9ef\">as<\/span> fo:\n<\/span><\/span><span style=\"display:flex;\"><span> dict <span style=\"color:#f92672\">=<\/span> pickle<span style=\"color:#f92672\">.<\/span>load(fo, encoding<span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#39;bytes&#39;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> dict\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">fetch_data<\/span>():\n<\/span><\/span><span style=\"display:flex;\"><span> train_data <span style=\"color:#f92672\">=<\/span> []\n<\/span><\/span><span style=\"display:flex;\"><span> train_label <span style=\"color:#f92672\">=<\/span> []\n<\/span><\/span><span style=\"display:flex;\"><span> test_data <span style=\"color:#f92672\">=<\/span> []\n<\/span><\/span><span style=\"display:flex;\"><span> testlabel <span style=\"color:#f92672\">=<\/span> []\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> i <span style=\"color:#f92672\">in<\/span> range(<span style=\"color:#ae81ff\">5<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> data <span style=\"color:#f92672\">=<\/span> unpickle(\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\"># datasets\\cifar-10-batches-py\\data_batch_1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#e6db74\">f<\/span><span style=\"color:#e6db74\">&#39;E:\/projects\/datasets\/cifar-10-batches-py\/data_batch_<\/span><span style=\"color:#e6db74\">{<\/span>i<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#e6db74\">}<\/span><span style=\"color:#e6db74\">&#39;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> train_data<span style=\"color:#f92672\">.<\/span>append(data[<span style=\"color:#e6db74\">b<\/span><span style=\"color:#e6db74\">&#39;data&#39;<\/span>])\n<\/span><\/span><span style=\"display:flex;\"><span> train_label<span style=\"color:#f92672\">.<\/span>append(data[<span style=\"color:#e6db74\">b<\/span><span style=\"color:#e6db74\">&#39;labels&#39;<\/span>])\n<\/span><\/span><span style=\"display:flex;\"><span> test <span style=\"color:#f92672\">=<\/span> unpickle(<span style=\"color:#e6db74\">&#39;E:\/projects\/datasets\/cifar-10-batches-py\/test_batch&#39;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> test_data <span style=\"color:#f92672\">=<\/span> test[<span style=\"color:#e6db74\">b<\/span><span style=\"color:#e6db74\">&#39;data&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> testlabel <span style=\"color:#f92672\">=<\/span> test[<span style=\"color:#e6db74\">b<\/span><span style=\"color:#e6db74\">&#39;labels&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> train_data <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>concatenate(train_data)\n<\/span><\/span><span style=\"display:flex;\"><span> train_label <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>concatenate(train_label)\n<\/span><\/span><span style=\"display:flex;\"><span> train_data <span style=\"color:#f92672\">=<\/span> train_data<span style=\"color:#f92672\">.<\/span>reshape(\n<\/span><\/span><span style=\"display:flex;\"><span> (<span style=\"color:#ae81ff\">50000<\/span>, <span style=\"color:#ae81ff\">3<\/span>, <span style=\"color:#ae81ff\">32<\/span>, <span style=\"color:#ae81ff\">32<\/span>))<span style=\"color:#f92672\">.<\/span>transpose(<span style=\"color:#ae81ff\">0<\/span>, <span style=\"color:#ae81ff\">2<\/span>, <span style=\"color:#ae81ff\">3<\/span>, <span style=\"color:#ae81ff\">1<\/span>)<span style=\"color:#f92672\">.<\/span>astype(<span style=\"color:#e6db74\">&#34;float32&#34;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> train_data <span style=\"color:#f92672\">=<\/span> train_data<span style=\"color:#f92672\">.<\/span>reshape(<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>, <span style=\"color:#ae81ff\">32<\/span><span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">32<\/span><span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">3<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> test_data <span style=\"color:#f92672\">=<\/span> test_data<span style=\"color:#f92672\">.<\/span>reshape((<span style=\"color:#ae81ff\">10000<\/span>, <span style=\"color:#ae81ff\">3<\/span>, <span style=\"color:#ae81ff\">32<\/span>, <span style=\"color:#ae81ff\">32<\/span>))<span style=\"color:#f92672\">.<\/span>transpose(\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#ae81ff\">0<\/span>, <span style=\"color:#ae81ff\">2<\/span>, <span style=\"color:#ae81ff\">3<\/span>, <span style=\"color:#ae81ff\">1<\/span>)<span style=\"color:#f92672\">.<\/span>astype(<span style=\"color:#e6db74\">&#34;float32&#34;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> test_data <span style=\"color:#f92672\">=<\/span> test_data<span style=\"color:#f92672\">.<\/span>reshape(<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>, <span style=\"color:#ae81ff\">32<\/span><span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">32<\/span><span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">3<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> train_data, train_label, test_data, testlabel\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">preprocess_data<\/span>(train_data, test_data):\n<\/span><\/span><span style=\"display:flex;\"><span> mean <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>mean(train_data, axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> train_data <span style=\"color:#f92672\">-=<\/span> mean\n<\/span><\/span><span style=\"display:flex;\"><span> test_data <span style=\"color:#f92672\">-=<\/span> mean\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> train_data, test_data\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">NeuralNetwork<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">__init__<\/span>(self, input_size, hidden_size, output_size, std<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e-4<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params <span style=\"color:#f92672\">=<\/span> {}\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> std <span style=\"color:#f92672\">*<\/span> np<span style=\"color:#f92672\">.<\/span>random<span style=\"color:#f92672\">.<\/span>randn(input_size, hidden_size)\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>zeros(hidden_size)\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> std <span style=\"color:#f92672\">*<\/span> np<span style=\"color:#f92672\">.<\/span>random<span style=\"color:#f92672\">.<\/span>randn(hidden_size, output_size)\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>zeros(output_size)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">relu<\/span>(self, x):\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> np<span style=\"color:#f92672\">.<\/span>maximum(<span style=\"color:#ae81ff\">0<\/span>, x)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">relu_backward<\/span>(self, dout, cache):\n<\/span><\/span><span style=\"display:flex;\"><span> dx, x <span style=\"color:#f92672\">=<\/span> dout, cache\n<\/span><\/span><span style=\"display:flex;\"><span> dx[x <span style=\"color:#f92672\">&lt;=<\/span> <span style=\"color:#ae81ff\">0<\/span>] <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> dx\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">loss<\/span>(self, X, y<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">None<\/span>, reg<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0.0<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> W1, b1 <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>], self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> W2, b2 <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>], self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> Hidden_layer <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>relu(np<span style=\"color:#f92672\">.<\/span>dot(X, W1) <span style=\"color:#f92672\">+<\/span> b1)\n<\/span><\/span><span style=\"display:flex;\"><span> scores <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(Hidden_layer, W2) <span style=\"color:#f92672\">+<\/span> b2\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> y <span style=\"color:#f92672\">is<\/span> <span style=\"color:#66d9ef\">None<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> scores\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> loss <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>sum(<span style=\"color:#f92672\">-<\/span>np<span style=\"color:#f92672\">.<\/span>log(np<span style=\"color:#f92672\">.<\/span>exp(scores[range(len(scores)), y]) <span style=\"color:#f92672\">\/<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> np<span style=\"color:#f92672\">.<\/span>sum(np<span style=\"color:#f92672\">.<\/span>exp(scores), axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>)))\n<\/span><\/span><span style=\"display:flex;\"><span> loss <span style=\"color:#f92672\">\/=<\/span> len(X)\n<\/span><\/span><span style=\"display:flex;\"><span> loss <span style=\"color:#f92672\">+=<\/span> <span style=\"color:#ae81ff\">0.5<\/span><span style=\"color:#f92672\">*<\/span>reg<span style=\"color:#f92672\">*<\/span>(np<span style=\"color:#f92672\">.<\/span>sum(W1<span style=\"color:#f92672\">*<\/span>W1)<span style=\"color:#f92672\">+<\/span>np<span style=\"color:#f92672\">.<\/span>sum(W2<span style=\"color:#f92672\">*<\/span>W2))\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> grads <span style=\"color:#f92672\">=<\/span> {}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> dscores <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>exp(scores)<span style=\"color:#f92672\">\/<\/span>np<span style=\"color:#f92672\">.<\/span>sum(np<span style=\"color:#f92672\">.<\/span>exp(scores), axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>, keepdims<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">True<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> dscores[range(len(scores)), y] <span style=\"color:#f92672\">-=<\/span> <span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> dscores <span style=\"color:#f92672\">\/=<\/span> len(X)\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(Hidden_layer<span style=\"color:#f92672\">.<\/span>T, dscores) <span style=\"color:#f92672\">+<\/span> reg<span style=\"color:#f92672\">*<\/span>W2\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>sum(dscores, axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> dhidden <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(dscores, W2<span style=\"color:#f92672\">.<\/span>T)\n<\/span><\/span><span style=\"display:flex;\"><span> dhidden_relu <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>relu_backward(dhidden, Hidden_layer)\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(X<span style=\"color:#f92672\">.<\/span>T, dhidden_relu) <span style=\"color:#f92672\">+<\/span> reg<span style=\"color:#f92672\">*<\/span>W1\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>sum(dhidden, axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> loss, grads\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">train<\/span>(self, X, y,\n<\/span><\/span><span style=\"display:flex;\"><span> learning_rate<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e-3<\/span>, learning_rate_decay<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0.95<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> reg<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">5e-6<\/span>, num_iters<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">100<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> batch_size<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">200<\/span>, verbose<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">False<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> num_train <span style=\"color:#f92672\">=<\/span> X<span style=\"color:#f92672\">.<\/span>shape[<span style=\"color:#ae81ff\">0<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> iterations_per_epoch <span style=\"color:#f92672\">=<\/span> max(num_train <span style=\"color:#f92672\">\/\/<\/span> batch_size, <span style=\"color:#ae81ff\">1<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> it <span style=\"color:#f92672\">in<\/span> range(num_iters):\n<\/span><\/span><span style=\"display:flex;\"><span> idx <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>random<span style=\"color:#f92672\">.<\/span>choice(num_train, batch_size, replace<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">True<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> X_batch <span style=\"color:#f92672\">=<\/span> X[idx]\n<\/span><\/span><span style=\"display:flex;\"><span> y_batch <span style=\"color:#f92672\">=<\/span> y[idx]\n<\/span><\/span><span style=\"display:flex;\"><span> loss, grads <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>loss(X_batch, y<span style=\"color:#f92672\">=<\/span>y_batch, reg<span style=\"color:#f92672\">=<\/span>reg)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\"># if verbose and it % 100 == 0:<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\"># print(&#39;iteration %d \/ %d: loss %f&#39; % (it, num_iters, loss))<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> it <span style=\"color:#f92672\">%<\/span> iterations_per_epoch <span style=\"color:#f92672\">==<\/span> <span style=\"color:#ae81ff\">0<\/span> <span style=\"color:#f92672\">and<\/span> it <span style=\"color:#f92672\">!=<\/span> <span style=\"color:#ae81ff\">0<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span> learning_rate <span style=\"color:#f92672\">*=<\/span> learning_rate_decay\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">predict<\/span>(self, X):\n<\/span><\/span><span style=\"display:flex;\"><span> Hidden_layer <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>relu(\n<\/span><\/span><span style=\"display:flex;\"><span> np<span style=\"color:#f92672\">.<\/span>dot(X, self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>]) <span style=\"color:#f92672\">+<\/span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>])\n<\/span><\/span><span style=\"display:flex;\"><span> scores <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(Hidden_layer, self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>]) <span style=\"color:#f92672\">+<\/span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> np<span style=\"color:#f92672\">.<\/span>argmax(scores, axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">main<\/span>():\n<\/span><\/span><span style=\"display:flex;\"><span> train_data, train_label, test_data, testlabel <span style=\"color:#f92672\">=<\/span> fetch_data()\n<\/span><\/span><span style=\"display:flex;\"><span> train_data, test_data <span style=\"color:#f92672\">=<\/span> preprocess_data(train_data, test_data)\n<\/span><\/span><span style=\"display:flex;\"><span> net <span style=\"color:#f92672\">=<\/span> NeuralNetwork(<span style=\"color:#ae81ff\">32<\/span><span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">32<\/span><span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">3<\/span>, <span style=\"color:#ae81ff\">100<\/span>, <span style=\"color:#ae81ff\">10<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> net<span style=\"color:#f92672\">.<\/span>train(train_data, train_label, num_iters<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">10000<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> batch_size<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">200<\/span>, verbose<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">True<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> print(<span style=\"color:#e6db74\">f<\/span><span style=\"color:#e6db74\">&#39;train accuracy: <\/span><span style=\"color:#e6db74\">{<\/span>np<span style=\"color:#f92672\">.<\/span>mean(net<span style=\"color:#f92672\">.<\/span>predict(train_data) <span style=\"color:#f92672\">==<\/span> train_label)<span style=\"color:#e6db74\">}<\/span><span style=\"color:#e6db74\">&#39;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">if<\/span> __name__ <span style=\"color:#f92672\">==<\/span> <span style=\"color:#e6db74\">&#39;__main__&#39;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span> main()\n<\/span><\/span><\/code><\/pre><\/div><p>\u8fd9\u91cc\u662f\u672c\u6587\u6240\u4f7f\u7528\u7684\u4ee3\u7801\u3002\uff08\u8bad\u7ec3\u5185\u5bb9\u4e3aCIFAR-10\u6570\u636e\u96c6\uff09<\/p>\n<ol>\n<li>\n<p>\u9996\u5148\uff0c<code>fetch_data<\/code>\u548c <code>unpickle<\/code>\u51fd\u6570\u4f5c\u4e3a\u6570\u636e\u8bfb\u5165\u51fd\u6570\uff0c\u5728\u8fd9\u91cc\u4e0d\u505a\u8bb2\u89e3\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053 <code>train_data,train_label,test_data,testlabel<\/code>\u8fd9\u56db\u4e2a\u90fd\u5206\u522b\u662f\u4ec0\u4e48\u5373\u53ef\uff0c<code>train_data<\/code>\u662f\u4e00\u4e2an*3072\u7684\u77e9\u9635\uff0c\u5b83\u5b58\u50a8\u4e86n\u4e2a\u8bad\u7ec3\u9700\u8981\u7684\u56fe\u50cf\u6570\u636e\uff0c<code>train_label<\/code>\u662f\u4e00\u4e2a\u5217\u8868\uff0c\u6709n\u9879\uff0c\u5b58\u50a8\u4e86 <code>train_data<\/code>\u5bf9\u5e94\u7684\u7b54\u6848\uff0c<code>test_data,testlabel<\/code>\u540c\u7406\u3002<\/p>\n<\/li>\n<li>\n<p>\u4e4b\u540e\u6211\u4eec\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u9884\u5904\u7406\uff0c\u6211\u4eec\u6765\u770b <code>preprocess_data<\/code>\u51fd\u6570\uff0c\u8fd9\u4efd\u4ee3\u7801\u4e2d\u53ea\u91c7\u7528\u4e86\u5747\u503c\u51cf\u6cd5\u521d\u59cb\u5316\uff0c\u8fd9\u662f\u6700\u4e3a\u5e38\u89c1\u7684\u521d\u59cb\u5316\u65b9\u5f0f\uff0c\u4e14\u5728\u8fd9\u4efd\u4ee3\u7801\u4e2d\u6548\u679c\u663e\u8457\uff0c\u5f53\u7136\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u5728\u8fd9\u4e2a\u51fd\u6570\u4e2d\u6dfb\u52a0\u66f4\u591a\u7684\u521d\u59cb\u5316\u65b9\u5f0f\uff0c\u6bd4\u5982\u5f52\u4e00\u5316\u7b49\u7b49\uff0c\u4f46\u662f\u6211\u4eec\u9700\u8981\u6ce8\u610f\u6570\u636e\u7684\u7c7b\u522b\uff0c\u9632\u6b62\u4ea7\u751f\u8d1f\u4f18\u5316\uff0c\u6bd4\u5982\u5728CIFAR-10\u6570\u636e\u96c6\u4e0a\uff0c\u5f52\u4e00\u5316\u4f1a\u663e\u8457\u964d\u4f4e\u5b83\u7684\u51c6\u786e\u7387\u3002<\/p>\n<\/li>\n<li>\n<p>\u73b0\u5728\u6211\u4eec\u9a6c\u4e0a\u5c31\u8981\u8fdb\u5165\u6700\u7d27\u5f20\u523a\u6fc0\u7684\u795e\u7ecf\u7f51\u7edc\u73af\u8282\u4e86\uff0c\u4f46\u662f\u5728\u8bad\u7ec3\u4e4b\u524d\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u660e\u786e\u6211\u4eec\u7684\u795e\u7ecf\u7f51\u7edc\u683c\u5f0f\uff0c\u6bd4\u5982\u5728\u8fd9\u4efd\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u7684\u662f\u4e00\u4e2a\u4e24\u5c42\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\uff0c\u6240\u4ee5\u6211\u4eec\u6709\u8fd9\u4e2a\u9884\u5904\u7406\u51fd\u6570<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-python\" data-lang=\"python\"><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">__init__<\/span>(self, input_size, hidden_size, output_size, std<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e-4<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params <span style=\"color:#f92672\">=<\/span> {}\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> std <span style=\"color:#f92672\">*<\/span> np<span style=\"color:#f92672\">.<\/span>random<span style=\"color:#f92672\">.<\/span>randn(input_size, hidden_size)\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>zeros(hidden_size)\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> std <span style=\"color:#f92672\">*<\/span> np<span style=\"color:#f92672\">.<\/span>random<span style=\"color:#f92672\">.<\/span>randn(hidden_size, output_size)\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>zeros(output_size)\n<\/span><\/span><\/code><\/pre><\/div><p>\u8fd9\u91cc\uff0c\u6211\u4eec\u5bf9\u6bcf\u4e00\u5c42\u5206\u522b\u5b9a\u4e49\u4e86\u5b83\u7684\u6743\u91cdW\u548c\u504f\u91cfb\uff0c\u8fd9\u56db\u4e2a\u53c2\u6570\u662f\u6211\u4eec\u9700\u8981\u8bad\u7ec3\u7684\u4e3b\u8981\u53c2\u6570\uff0c\u5e76\u4e14\u6211\u4eec\u6ce8\u610f\u5230\uff0c\u4ed6\u4eec\u90fd\u662f\u6839\u636e\u795e\u7ecf\u5143\u6570\u91cf\u6765\u5b9a\u4e49\u7684\u77e9\u9635\uff0c\u90a3\u4e48\u6211\u73b0\u5728\u6765\u89e3\u91ca\u4e00\u4e0b\u4e3a\u4ec0\u4e48\u662f\u77e9\u9635\u3002\u6211\u4eec\u6765\u770b\u8fd9\u4e2a\u521d\u59cb\u5316\u51fd\u6570\u7684\u4f20\u5165\u53c2\u6570 <code>input_size, hidden_size, output_size, std=1e-4<\/code>\uff0cstd\u5148\u4e0d\u7528\u7ba1\uff0c\u524d\u9762\u4e09\u4e2a\u5206\u522b\u662f\u8f93\u5165\u7684\u683c\u5f0f\uff0c\u7b2c\u4e00\u5c42\u683c\u5f0f\uff0c\u8f93\u51fa\u683c\u5f0f\uff0c\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u7b80\u5355\u7406\u89e3\u4e3a\u6211\u4eec\u9700\u8981\u5c06\u4e00\u4e2a\u6709\u82e5\u5e72\u4e2a\u6570\u5b57\u7684\u96c6\u5408\uff0c\u901a\u8fc7\u4e00\u7cfb\u5217\u7684\u6570\u5b66\u8fd0\u7b97\uff0c\u5148\u538b\u7f29\u4e3a <code>hidden_size<\/code>\u7684\u5927\u5c0f\uff0c\u6700\u540e\u518d\u538b\u7f29\u4e3a <code>output_size<\/code>\u7684\u5927\u5c0f\uff0c\u800c\u8fd9\u91cc\u7684 <code>output_size<\/code>\u5c31\u662f\u6211\u4eec\u9700\u8981\u5206\u7c7b\u768410\u4e2a\u6807\u7b7e\u3002\u800c\u8fd9\u91cc\u5bf9\u53c2\u6570\u7684\u521d\u59cb\u5316\u4f7f\u7528\u4e86\u968f\u673a\u6570\uff0c\u56e0\u4e3a\u5168\u90e8\u4e3a0\u662f\u4e0d\u6b63\u786e\u7684\uff0c\u56e0\u4e3a\u6211\u4eec\u540e\u7eed\u8fd8\u8981\u5bf9\u5176\u8fdb\u884c\u6c42\u504f\u5bfc\u4ee5\u53ca\u8ba1\u7b97\u68af\u5ea6\u3002<\/p>\n<\/li>\n<li>\n<p>\u521d\u59cb\u5316\u4e4b\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8fdb\u884c\u8bad\u7ec3\u4e86\uff0c\u800c\u8bad\u7ec3\u7684\u76ee\u7684\u662f\u8fed\u4ee3\u8ba1\u7b97\u51fa\u6700\u597d\u7684\u53c2\u6570\uff0c\u4e5f\u5c31\u662f\u795e\u7ecf\u7f51\u7edc\u521d\u59cb\u5316\u6240\u5b9a\u4e49\u7684\u56db\u4e2a\u53c2\u6570\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-python\" data-lang=\"python\"><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">train<\/span>(self, X, y,\n<\/span><\/span><span style=\"display:flex;\"><span> learning_rate<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e-3<\/span>, learning_rate_decay<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0.95<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> reg<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">5e-6<\/span>, num_iters<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">100<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> batch_size<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">200<\/span>, verbose<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">False<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> num_train <span style=\"color:#f92672\">=<\/span> X<span style=\"color:#f92672\">.<\/span>shape[<span style=\"color:#ae81ff\">0<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> iterations_per_epoch <span style=\"color:#f92672\">=<\/span> max(num_train <span style=\"color:#f92672\">\/\/<\/span> batch_size, <span style=\"color:#ae81ff\">1<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span> it <span style=\"color:#f92672\">in<\/span> range(num_iters):\n<\/span><\/span><span style=\"display:flex;\"><span> idx <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>random<span style=\"color:#f92672\">.<\/span>choice(num_train, batch_size, replace<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">True<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> X_batch <span style=\"color:#f92672\">=<\/span> X[idx]\n<\/span><\/span><span style=\"display:flex;\"><span> y_batch <span style=\"color:#f92672\">=<\/span> y[idx]\n<\/span><\/span><span style=\"display:flex;\"><span> loss, grads <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>loss(X_batch, y<span style=\"color:#f92672\">=<\/span>y_batch, reg<span style=\"color:#f92672\">=<\/span>reg)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>] <span style=\"color:#f92672\">-=<\/span> learning_rate <span style=\"color:#f92672\">*<\/span> grads[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\"># if verbose and it % 100 == 0:<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\"># print(&#39;iteration %d \/ %d: loss %f&#39; % (it, num_iters, loss))<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> it <span style=\"color:#f92672\">%<\/span> iterations_per_epoch <span style=\"color:#f92672\">==<\/span> <span style=\"color:#ae81ff\">0<\/span> <span style=\"color:#f92672\">and<\/span> it <span style=\"color:#f92672\">!=<\/span> <span style=\"color:#ae81ff\">0<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span> learning_rate <span style=\"color:#f92672\">*=<\/span> learning_rate_decay\n<\/span><\/span><\/code><\/pre><\/div><p>\u6211\u4eec\u6765\u770b\u8fd9\u4e2a\u8bad\u7ec3\u4e3b\u51fd\u6570\uff0creg\u662f\u6211\u4eec\u5b9a\u4e49\u7684L2\u6b63\u5219\u5316\u8d85\u53c2\u6570\uff0c\u6211\u4eec\u76f4\u63a5\u6765\u770b\u8fed\u4ee3\u8bad\u7ec3\u5faa\u73af\uff0c\u6211\u4eec\u6bcf\u4e00\u6b21\u8fed\u4ee3\u968f\u673a\u62bd\u53d6\u6570\u636e\u8fdb\u884c\u8bad\u7ec3\uff0c\u7528\u8fd9\u4efd\u6570\u636e\u8ba1\u7b97\u51fa\u56db\u4e2a\u53c2\u6570\u7684\u68af\u5ea6\uff0c\u4ee5\u6b64\u6765\u66f4\u65b0\u6211\u4eec\u7684\u53c2\u6570\uff0c\u4f7f\u6211\u4eec\u7684\u53c2\u6570\u4e0d\u65ad\u4f18\u5316\u3002\u5728\u8fd9\u4e2a\u51fd\u6570\u4e2d\u6211\u4eec\u8fd8\u4f7f\u7528\u4e86\u4e24\u4e2a\u53c2\u6570\uff0c<code>learning_rate<\/code>\u548c <code>learning_rate_decay<\/code>\uff0c\u8fd9\u4e24\u4e2a\u53c2\u6570\u7528\u6765\u4e0d\u65ad\u964d\u4f4e\u6a21\u578b\u7684\u5b66\u4e60\u7387\uff0c\u4f7f\u53c2\u6570\u7684\u8fed\u4ee3\u8d8a\u6765\u8d8a\u7cbe\u786e\u3002<\/p>\n<\/li>\n<li>\n<p>\u6211\u4eec\u53d1\u73b0\u5728\u8bad\u7ec3\u8fed\u4ee3\u4e2d\u4f7f\u7528\u4e86\u4e00\u4e2a\u5f88\u91cd\u8981\u7684 <code>loss<\/code>\u51fd\u6570\u6765\u8ba1\u7b97\u6211\u4eec\u7684\u53c2\u6570\u68af\u5ea6\uff0c\u8fd9\u4e5f\u662f\u795e\u7ecf\u7f51\u7edc\u6700\u91cd\u8981\u7684\u90e8\u5206\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-python\" data-lang=\"python\"><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">relu<\/span>(self, x):\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> np<span style=\"color:#f92672\">.<\/span>maximum(<span style=\"color:#ae81ff\">0<\/span>, x)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">relu_backward<\/span>(self, dout, cache):\n<\/span><\/span><span style=\"display:flex;\"><span> dx, x <span style=\"color:#f92672\">=<\/span> dout, cache\n<\/span><\/span><span style=\"display:flex;\"><span> dx[x <span style=\"color:#f92672\">&lt;=<\/span> <span style=\"color:#ae81ff\">0<\/span>] <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> dx\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">def<\/span> <span style=\"color:#a6e22e\">loss<\/span>(self, X, y<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">None<\/span>, reg<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0.0<\/span>):\n<\/span><\/span><span style=\"display:flex;\"><span> W1, b1 <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>], self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span> W2, b2 <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>], self<span style=\"color:#f92672\">.<\/span>params[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> Hidden_layer <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>relu(np<span style=\"color:#f92672\">.<\/span>dot(X, W1) <span style=\"color:#f92672\">+<\/span> b1)\n<\/span><\/span><span style=\"display:flex;\"><span> scores <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(Hidden_layer, W2) <span style=\"color:#f92672\">+<\/span> b2\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> y <span style=\"color:#f92672\">is<\/span> <span style=\"color:#66d9ef\">None<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> scores\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> loss <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>sum(<span style=\"color:#f92672\">-<\/span>np<span style=\"color:#f92672\">.<\/span>log(np<span style=\"color:#f92672\">.<\/span>exp(scores[range(len(scores)), y]) <span style=\"color:#f92672\">\/<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> np<span style=\"color:#f92672\">.<\/span>sum(np<span style=\"color:#f92672\">.<\/span>exp(scores), axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>)))\n<\/span><\/span><span style=\"display:flex;\"><span> loss <span style=\"color:#f92672\">\/=<\/span> len(X)\n<\/span><\/span><span style=\"display:flex;\"><span> loss <span style=\"color:#f92672\">+=<\/span> <span style=\"color:#ae81ff\">0.5<\/span><span style=\"color:#f92672\">*<\/span>reg<span style=\"color:#f92672\">*<\/span>(np<span style=\"color:#f92672\">.<\/span>sum(W1<span style=\"color:#f92672\">*<\/span>W1)<span style=\"color:#f92672\">+<\/span>np<span style=\"color:#f92672\">.<\/span>sum(W2<span style=\"color:#f92672\">*<\/span>W2))\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> grads <span style=\"color:#f92672\">=<\/span> {}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> dscores <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>exp(scores)<span style=\"color:#f92672\">\/<\/span>np<span style=\"color:#f92672\">.<\/span>sum(np<span style=\"color:#f92672\">.<\/span>exp(scores), axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>, keepdims<span style=\"color:#f92672\">=<\/span><span style=\"color:#66d9ef\">True<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> dscores[range(len(scores)), y] <span style=\"color:#f92672\">-=<\/span> <span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> dscores <span style=\"color:#f92672\">\/=<\/span> len(X)\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;W2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(Hidden_layer<span style=\"color:#f92672\">.<\/span>T, dscores) <span style=\"color:#f92672\">+<\/span> reg<span style=\"color:#f92672\">*<\/span>W2\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;b2&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>sum(dscores, axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> dhidden <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(dscores, W2<span style=\"color:#f92672\">.<\/span>T)\n<\/span><\/span><span style=\"display:flex;\"><span> dhidden_relu <span style=\"color:#f92672\">=<\/span> self<span style=\"color:#f92672\">.<\/span>relu_backward(dhidden, Hidden_layer)\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;W1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>dot(X<span style=\"color:#f92672\">.<\/span>T, dhidden_relu) <span style=\"color:#f92672\">+<\/span> reg<span style=\"color:#f92672\">*<\/span>W1\n<\/span><\/span><span style=\"display:flex;\"><span> grads[<span style=\"color:#e6db74\">&#39;b1&#39;<\/span>] <span style=\"color:#f92672\">=<\/span> np<span style=\"color:#f92672\">.<\/span>sum(dhidden, axis<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> loss, grads\n<\/span><\/span><\/code><\/pre><\/div><p>\u8fd9\u91cc\u4fbf\u662f\u6211\u4eec\u8ba1\u7b97\u6240\u9700\u8981\u7684\u51fd\u6570\uff0c\u6211\u4eec\u6765\u5bf9 <code>loss<\/code>\u51fd\u6570\u9010\u6b65\u5206\u6790\u3002\u9996\u5148\u4f20\u5165\u73b0\u6709\u53c2\u6570\u6ca1\u6709\u4ec0\u4e48\u597d\u8bf4\u7684\uff0c\u7136\u540e\u4fbf\u662f\u6211\u4eec\u7684\u6b63\u5411\u4f20\u64ad\u73af\u8282\uff0c\u6211\u4eec\u5148\u7528\u73b0\u6709\u53c2\u6570\u8ba1\u7b97\u51fa10\u4e2a\u7c7b\u522b\u6240\u5bf9\u5e94\u7684\u5f97\u5206\uff0c\u7136\u540e\u6211\u4eec\u5c06\u8fd910\u4e2a\u5206\u6570\u653e\u8fdb\u7ebf\u6027\u5206\u7c7b\u5668\u91cc\u8fdb\u884c\u8ba1\u7b97\uff0c\u6700\u540e\u5f97\u5230\u7684\u5c31\u662f\u6211\u4eec\u7684\u635f\u5931 <code>loss<\/code>\u3002\u4e4b\u540e\u4fbf\u662f\u6211\u4eec\u559c\u95fb\u4e50\u89c1\u7684\u53cd\u5411\u4f20\u64ad\u73af\u8282\uff0c\u6240\u8c13\u53cd\u5411\u4f20\u64ad\uff0c\u5176\u5b9e\u5c31\u662f\u6309\u7167\u7ebf\u6027\u6c42\u5bfc\u6cd5\u5219\u5bf9\u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\u7684\u6240\u6709\u53c2\u6570\u6c42\u504f\u5bfc\uff0c\u4ee5\u6b64\u627e\u5230loss\u4e0b\u964d\u6700\u5feb\u7684\u70b9\uff0c\u624d\u80fd\u4ee5\u6b64\u66f4\u65b0\u53c2\u6570\u300226-28\u884c\u90fd\u662f\u5728\u5bf9softmax\u7ebf\u6027\u5206\u7c7b\u5668\u6c42\u68af\u5ea6\uff0c\u5230\u4e8629\u884c\u6211\u4eec\u53d1\u73b0\u6211\u4eec\u5728\u8fd0\u7b97\u65f6\u5bf9\u77e9\u9635\u8fdb\u884c\u4e86\u8f6c\u7f6e\uff0c\u901a\u4fd7\u5730\u8bb2\uff0c\u6211\u4eec\u660e\u767d\u77e9\u9635\u662f\u4e0d\u670d\u4ece\u4e58\u6cd5\u4ea4\u6362\u5f8b\u7684\uff0c\u6240\u4ee5\u5982\u679c\u6211\u4eec\u60f3\u8ba9\u5b83\u6b63\u786e\u5730\u4e58\uff0c\u4fbf\u9700\u8981\u7ed9\u4ed6\u8f6c\u4e2a\u65b9\u5411\uff0c\u8fd9\u6837\u624d\u53ef\u4ee5\u8fdb\u884c\u77e9\u9635\u4e58\u6cd5\u3002\u8fd8\u6709\u4e00\u70b9\u9700\u8981\u6ce8\u610f\uff0c\u572832\u884c\u6211\u4eec\u5bf9\u6fc0\u6d3b\u51fd\u6570\u8fdb\u884c\u4e86\u6c42\u5bfc\uff0c\u56e0\u4e3a\u6211\u4eec\u5728\u524d\u5411\u4f20\u64ad\u7684\u65f6\u5019\u5728\u7b2c\u4e00\u5c42\u4f7f\u7528\u4e86\u6fc0\u6d3b\u51fd\u6570\uff0c\u6240\u4ee5\u8fd9\u4e00\u6b65\u4e5f\u5fc5\u4e0d\u53ef\u5c11\u3002\u81f3\u6b64\uff0c\u6211\u4eec\u4fbf\u53ef\u4ee5\u5b8c\u6574\u5730\u8ba1\u7b97\u51fa\u53c2\u6570\u68af\u5ea6\uff0c\u5e76\u4ee5\u6b64\u8fed\u4ee3\u8bad\u7ec3\u6211\u4eec\u7684\u56db\u4e2a\u4e3b\u8981\u53c2\u6570\u3002<\/p>\n<\/li>\n<\/ol>"},{"title":"OI\u56de\u5fc6\u5f55+\u9000\u5f79\u8bb0","link":"https:\/\/rechenz.github.io\/post\/oi%E5%9B%9E%E5%BF%86%E5%BD%95+%E9%80%80%E5%BD%B9%E8%AE%B0\/","pubDate":"Fri, 17 Nov 2023 19:49:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/oi%E5%9B%9E%E5%BF%86%E5%BD%95+%E9%80%80%E5%BD%B9%E8%AE%B0\/","description":"<p>2023\u5e7411\u670817\u65e5<\/p>\n<p>\u660e\u5929\u5c31\u662fNOIP\u4e86\uff0c\u6253\u7b97\u6253\u5b8cNOIP\u5c31\u9000\u5f79\uff0c\u4e8e\u662f\u5728\u8fd9\u91cc\u5199\u4e00\u7bc7\u56de\u5fc6\u5f55\u3002<\/p>\n<p>\u6211\u521d\u4e2d\u7684\u65f6\u5019\u6839\u672c\u4e0d\u77e5\u9053\u6709\u4fe1\u606f\u7ade\u8d5b\u8fd9\u4e2a\u4e1c\u897f\uff0c\u751a\u81f3\u5bf9\u5176\u5b83\u7684\u7ade\u8d5b\u4e5f\u4e0d\u4e86\u89e3\uff0c\u552f\u4e00\u7684\u5370\u8c61\u53ea\u662f\u7ade\u8d5b\u9898\u5f88\u96be\uff0c\u53c2\u52a0\u7ade\u8d5b\u7684\u4eba\u5f88\u5f3a\uff0c\u4ec5\u6b64\u800c\u5df2\u3002<\/p>\n<p>\u90a3\u65f6\u5019\u9ad8\u4e00\u519b\u8bad\u4e4b\u540e\u56e0\u4e3a\u75ab\u60c5\u5c31\u5f00\u59cb\u4e0a\u7f51\u8bfe\uff0c\u4e5f\u662f\u5728\u4e0a\u8bfe\u540e\u7684\u6ca1\u51e0\u5929\uff0c\u6211\u7684\u73ed\u4e3b\u4efb\u5728\u73ed\u7ea7\u7fa4\u91cc\u53d1\u4e86\u4e00\u6761\u4fe1\u606f\u7ade\u8d5b\u62db\u65b0\u7684\u6d88\u606f\uff0c\u672c\u6765\u662f\u89c9\u5f97\u81ea\u5df1\u53c2\u52a0\u4e0d\u4e86\u7684\uff0c\u4f46\u662f\u770b\u5230\u6b22\u8fce\u96f6\u57fa\u7840\u5c31\u8fd8\u662f\u53c2\u52a0\u4e86\uff0c\u5f53\u65f6\u5176\u5b9e\u8fd8\u62a5\u4e86\u4e00\u4e2a\u7269\u7406\u7ade\u8d5b\uff0c\u4f46\u662f\u56e0\u4e3a\u9700\u8981\u81ea\u5b66\u5b8c\u9ad8\u4e00\u7684\u7269\u7406\u5185\u5bb9\uff0c\u4e8e\u662f\u5c31\u653e\u5f03\u4e86\u3002<\/p>\n<p>\u7b2c\u4e00\u8282\u8bfe\u662f\u5728\u5468\u516d\uff0c\u90a3\u662f\u6211\u624d\u77e5\u9053\u4fe1\u606f\u7ade\u8d5b\u8981\u5b66\u7f16\u7a0b\uff0c\u6211\u66fe\u7ecf\u5176\u5b9e\u4e00\u76f4\u60f3\u5b66\uff0c\u4f46\u662f\u56e0\u4e3a\u61d2\u548c\u627e\u4e0d\u5230\u7cfb\u7edf\u7684\u8bfe\u7a0b\u4e5f\u662f\u5168\u5495\u6389\u4e86\uff0c\u76f4\u5230\u73b0\u5728\u6211\u53d1\u73b0\u8fd9\u662f\u4e00\u4e2a\u5b66\u7f16\u7a0b\u7684\u673a\u4f1a\u3002<\/p>\n<p>\u7b2c\u4e00\u8282\u8bfe\u8bb2\u4e86\u4e00\u4e9b\u8bed\u8a00\u57fa\u7840\uff0c\u5f53\u65f6\u751a\u81f3\u8ba4\u771f\u5730\u624b\u5199\u7b14\u8bb0\uff0c\u8fd8\u628a\u4e24\u4e2a\u5934\u6587\u4ef6\u6284\u4e0b\u6765\u80cc\u4e86\u597d\u4e45\uff08\u5f53\u65f6\u6839\u672c\u4e0d\u77e5\u9053\u6709\u4e07\u80fd\u5934\u8fd9\u4e2a\u4e1c\u897f\uff09\uff0c\u6559\u7ec3\u8bb2 <code>scanf<\/code> \u7684\u65f6\u5019\u8fd8\u6709\u4e24\u4e2a\u540c\u5b66\u95ee\u4e3a\u4ec0\u4e48\u4e0d\u7528 <code>cin<\/code> \u7684\uff0c\u6709\u540c\u5b66\u6572\u4ee3\u7801\u6709\u95ee\u9898\u8c03\u4e0d\u51fa\u6765\u4e86\u4e5f\u4f1a\u53d1\u5728\u817e\u8baf\u4f1a\u8bae\u7684\u8ba8\u8bba\u533a\u53bb\u95ee\uff0c\u5f53\u65f6\u6211\u89c9\u5f97\u4ed6\u4eec\u597d\u5f3a\u554a\uff08\u4f46\u662f\u540e\u6765\u597d\u50cf\u90fd\u8d70\u4e86\uff09\u3002<\/p>\n<p>\u90a3\u4e2a\u65f6\u5019\u5468\u4e09\u665a\u4e0a\u5c31\u8981\u57f9\u8bad\u4e86\uff0c\u6559\u7ec3\u8bb2\u5b8c\u8fd8\u4f1a\u5728\u5b66\u6821\u7684\u8001oj\u4e0a\u7559\u9898\uff0c\u90a3\u4e2a\u65f6\u5019\u4f3c\u4e4e\u662f\u627e\u5230\u4e86\u8fc7\u9898\u7684\u5feb\u611f\uff0c\u7ecf\u5e38\u5199\u9898\u8d85\u8fc7\u665a\u4e0a12\u70b9\uff08\u4f46\u662f\u7ecf\u5e38\u662f\u56e0\u4e3a\u4e00\u4e9b\u8bed\u6cd5\u4e0a\u7684nt\u9519\u8bef\u76ef\u7740\u770b\u4e86\u5f88\u4e45\u770b\u4e0d\u51fa\u6765\uff09\u3002<\/p>\n<p>\u5927\u6982\u662f\u4e00\u4e2a\u6708\u4e4b\u540e\u5427\uff0c\u90a3\u4e2a\u65f6\u5019\u5c31\u8981\u6709\u521d\u8d5b\u4e86\uff0c\u56e0\u4e3a\u521d\u8d5b\u662f\u5468\u516d\u6bd4\uff08\u90a3\u5e74\u6539\u6210\u4e86\u7ebf\u4e0a\uff09\uff0c\u6240\u4ee5\u5728\u90a3\u5468\u4e09\u6211\u4eec\u6559\u7ec3\u8fd8\u5b89\u6392\u4e86\u5de5\u5927\u7684\u5b66\u957f\u56de\u6765\u7ed9\u6211\u4eec\u8bb2\u521d\u8d5b\u77e5\u8bc6\u70b9\uff08\u6211\u5f53\u65f6\u8fd8\u56e0\u4e3a\u4f4f\u6821\u5728\u56de\u5bb6\u7684\u8def\u4e0a\u9519\u8fc7\u4e86\u4e00\u5927\u534a\uff0c\u5e78\u8fd0\u7684\u662f\u6709\u5f55\u50cf\uff0c\u56de\u5bb6\u770b\u4e86\u4e09\u904d<del>\u867d\u7136\u8fd8\u662f\u6ca1\u542c\u61c2<\/del>\uff09\uff0c\u77e5\u8bc6\u70b9\u771f\u7684\u5f88\u591a\uff0c\u5f53\u65f6\u542c\u7684\u8111\u888b\u75bc\uff0c\u4f46\u8fd8\u662f\u62fc\u547d\u8bb0\u4f4f\u4e86\u4e00\u4e9b\u3002<\/p>\n<p>\u5468\u516d\u7684\u521d\u8d5b\u6211\u5e26\u7740\u90a3\u53ef\u601c\u7684\u77e5\u8bc6\u5f00\u59cb\u8003\u8bd5\uff0c\u5176\u5b9e\u5f53\u65f6\u6839\u672c\u5c31\u6ca1\u6709\u611f\u89c9\u81ea\u5df1\u80fd\u8fc7\uff08\u540e\u6765\u624d\u77e5\u9053\u6709\u6559\u7ec3\u63a8\u8350\u8fd9\u4e2a\u4e1c\u897f\uff09\uff0c\u8003\u573a\u4e0a30\u5206\u949f\u628a\u524d\u9762\u7684\u9009\u62e9\u8499\u5b8c\u540e\u5f00\u59cb\u5750\u7262\uff08\u56e0\u4e3a\u5f53\u65f6\u6839\u672c\u770b\u4e0d\u61c2\u4ee3\u7801\uff09\uff0c\u6211\u8bb0\u5f97\u6709\u4e00\u9053\u9898\u662f\u95ee\u4f60\u4e00\u9897\u4e09\u53c9\u6811\u7684\u4e00\u4e2a\u8282\u70b9\u7684\u7236\u4eb2\u8282\u70b9\u7684\u7f16\u53f7\uff0c\u6211\u672c\u6765\u662f\u6253\u7b97\u628a\u6574\u68f5\u6811\u753b\u51fa\u6765\u7684\uff0c\u4f46\u662f\u56e0\u4e3aA4\u7eb8\u4e0d\u591f\u5927\u53ea\u80fd\u653e\u5f03\u4e86\uff08\uff0c\u6211\u540e\u6765\u5750\u7262\u5b9e\u5728\u95f2\u7684\u5728\u6444\u50cf\u5934\u76f2\u70b9\u770bbilibili\u76f4\u64ad\uff0c\u6839\u672c\u6ca1\u4eba\u7ba1\uff0c\u773c\u795e\u90fd\u4e0d\u7528\u88c5\u4e00\u4e0b\u7684\u90a3\u79cd\uff08<\/p>\n<p>\u8003\u5b8c\u7fa4\u91cc\u8fd8\u6709\u8bf4\u4eca\u5e74\u4f30\u520690\u6ca1\u8003\u597d\uff0c<del>\u771fTM\u8be5\u6b7b\u554a<\/del><\/p>\n<p>\u5fd8\u4e86\u662f\u4e00\u5468\u8fd8\u662f\u4e24\u5468\u65f6\u5019\u51fa\u5206\uff0c\u53bb\u673a\u623f\u67e5\u5206\u53d1\u73b0\u81ea\u5df1\u8fc7\u4e86\uff0c\u5f53\u65f6\u771f\u7684\u5f88\u5f00\u5fc3\uff0c\u6bd5\u7adf\u7eaf\u8499\u7684\u80fd\u625346\u5206\uff08\u867d\u7136\u6559\u7ec3\u8ddf\u6211\u4eec\u8bf4\u673a\u623f\u91cc\u662f\u4e2a\u4eba\u5c31\u8fc7\u4e86\uff09\u3002<\/p>\n<p>\u4e4b\u540e\u4fbf\u662f\u5348\u7761\u8ddf\u8001\u5e08\u8bf7\u5047\u53bb\u673a\u623f\u505a\u9898\uff0c\u867d\u7136\u9664\u4e86\u4e00\u4e2a\u793e\u725b\u5f53\u65f6\u6211\u8ddf\u522b\u4eba\u6839\u672c\u8bf4\u4e0d\u4e0a\u8bdd\uff0c\u6211\u90a3\u4e2a\u65f6\u5019\u8fde\u6d1b\u8c37\u90fd\u4e0d\u77e5\u9053\uff0c\u53ea\u4f1a\u5728\u5b66\u6821\u7684oj\u4e0a\u5237\u4e00\u4e9b\u5165\u95e8\u9898\u3002<\/p>\n<p>\u4e4b\u540e\u4e5f\u6162\u6162\u5730\u5f00\u59cb\u5b66\u4e00\u4e9b\u7b97\u6cd5\uff0c\u751a\u81f3\u6211\u8fd8\u95ee\u8fc7\u6559\u7ec3\u4e4b\u540e\u8fd8\u4f1a\u8bb2\u8bed\u8a00\u5417\uff0c\u6559\u7ec3\u8ddf\u6211\u8bf4\u5269\u4e0b\u7684\u518d\u8bb2\u7ade\u8d5b\u5c31\u7528\u4e0d\u4e0a\u4e86\uff08\u5f53\u65f6\u73b0\u5728\u60f3\u60f3\u8fd9\u8bdd\u5176\u5b9e\u662f\u4e3a\u4e86\u8d76\u8fdb\u5ea6\u7f16\u7684\uff09\u3002<\/p>\n<p>\u56fd\u5e86\u7684\u65f6\u5019\u6559\u7ec3\u8fd8\u5b89\u6392\u4e86\u9ad8\u4e8c\u7684\u5b66\u957f\u7ed9\u6211\u4eec\u8bb2\u5927\u5757\u7684\u77e5\u8bc6\u70b9\uff0c\u53ef\u60dc\u7684\u662f\u5f53\u65f6\u9664\u4e86lxy\u5b66\u957f\u8bb2\u7684\u56fe\u8bba\u4ee5\u5916\u6211\u57fa\u672c\u90fd\u5728\u6478\u9c7c\uff0c\u6839\u672c\u542c\u4e0d\u8fdb\u53bb\uff0c\u73b0\u5728\u60f3\u60f3\u4e5f\u8bb8\u542c\u4e86\u7684\u8bdd\u80fd\u5c11\u8d70\u4e00\u4e9b\u5f2f\u8def\u3002<\/p>\n<p>\u56fd\u5e86\u540e\u4e24\u5929\u8fd8\u53c2\u52a0\u4e86\u4e00\u6b21\u6a21\u62df\u8d5b\uff0c\u90a3\u4e2a\u65f6\u5019\u6709\u57fa\u7840\u548c\u6ca1\u57fa\u7840\u7684\u4e24\u4e2a\u73ed\u4e5f\u5408\u5e76\u4e86\uff0c\u867d\u7136\u662f\u4e0d\u51fa\u610f\u6599\u7684\u540e\u51e0\u540d\uff0c\u4f46\u662f\u81f3\u5c11\u4e0d\u662f\u57ab\u5e95\uff0c\u8fd9\u8fd8\u662f\u6709\u4e00\u4e9b\u5fc3\u7406\u5b89\u6170\u7684\uff0c\u4e0d\u7136\u6211\u53ef\u80fd\u65e9\u5c31\u575a\u6301\u4e0d\u4f4f\u4e86\u3002<\/p>\n<p>\u4e4b\u540e\u6559\u7ec3\u5b66\u7684\u770b\u6548\u679c\u4e0d\u592a\u597d\u8fd8\u8ba9\u5de5\u5927\u7684\u5b66\u957f\u7ed9\u6211\u4eec\u91cd\u65b0\u8bb2\u4e86\u4e00\u904ddij\u3002<\/p>\n<p>\u56e0\u4e3a\u5f53\u65f6\u5c31\u542c\u4e86\u56fe\u8bba\uff0c\u6240\u4ee5\u505a\u9898\u4e5f\u53ea\u505a\u4e86\u56fe\u8bba\uff0c\u4e00\u4e2a\u94fe\u5f0f\u524d\u5411\u661f\u6211\u5c06\u8fd1\u7ffb\u4e86\u767e\u5ea6\u4e0a\u80fd\u627e\u5230\u7684\u6240\u6709\u535a\u5ba2\u624d\u52c9\u5f3a\u7406\u89e3\uff08\u6211\u5f53\u65f6\u751a\u81f3\u4e0d\u77e5\u9053\u6709OIWIKI\u8fd9\u4e2a\u4e1c\u897f\uff09\u3002<\/p>\n<p>\u57fa\u672c\u4e00\u4e2adij\u677f\u5b50\u548c\u6700\u5c0f\u751f\u6210\u6811\u677f\u5b50\u6211\u90fd\u8c03\u4e86\u5c06\u8fd1\u4e00\u5468\u3002<\/p>\n<p>\u7136\u540e\u5728\u6211\u677f\u5b50\u8fd8\u6ca1\u6572\u660e\u767d\u7684\u65f6\u5019\u5df2\u7ecf\u5f00\u59cb\u8bb2\u6811\u578bdp\u4e86\uff0c\u4f46\u662f\u5df2\u7ecf\u662f\u5f7b\u5e95\u542c\u4e0d\u61c2\u4e86\uff0c\u8bb2\u8bfe\u4e5f\u4e0d\u542c\uff0c\u5c31\u5728\u8865\u4e4b\u524d\u7684\u677f\u5b50\u3002<\/p>\n<p>\u5f53\u65f6\u8fd8\u56e0\u4e3a\u53c2\u52a0CSP\u8981\u6536480\u5757\u94b1\u7ea0\u7ed3\u4e86\u597d\u4e45\u8981\u4e0d\u8981\u62a5\uff0c\u5e78\u8fd0\u7684\u662f\u5bb6\u957f\u8fd8\u633a\u652f\u6301\u7684\u3002<\/p>\n<p>\u4f46\u662f\u540e\u6765CSP\u53d6\u6d88\u4e86\uff0c\u4e5f\u5c31\u6ca1\u6709\u4ec0\u4e48\u8fc7\u4e0d\u8fc7\u7ebf\u7684\u4e8b\u4e86\uff0c\u5f53\u65f6\u8fd8\u56e0\u4e3a\u8fd9\u4e2a\u5f00\u5fc3\u4e86\u597d\u4e45\u3002<\/p>\n<p>\u4e4b\u540e\u7684\u65e5\u5b50\u4e5f\u5c31\u662f\u5b66\u65b0\u7b97\u6cd5\uff0c\u6253\u6a21\u62df\u8d5b\uff0c\u867d\u7136\u90a3\u4e2a\u65f6\u5019\u5b66\u65b0\u7b97\u6cd5\u591a\u534a\u662f\u542c\u4e0d\u61c2\u7684\uff0c\u6253\u6a21\u62df\u8d5b\u4e5f\u662f\u57fa\u672c\u540e\u51e0\u540d\uff0c\u6709\u7684\u65f6\u5019\u5bb6\u957f\u95ee\u8d77\u6765\u5b66\u7684\u600e\u4e48\u6837\u4e5f\u53ea\u80fd\u6577\u884d\u8fc7\u53bb\u633a\u597d\u7684\u3002<\/p>\n<p>\u518d\u540e\u6765\uff0cNOIP\u4e5f\u56e0\u4e3a\u75ab\u60c5\u53d6\u6d88\u4e86\uff0c\u6539\u6210\u4e86\u4e0b\u5b66\u671f\u7684\u6625\u5b63\u6d4b\u8bd5\u3002<\/p>\n<p>\u53d1\u751f\u53d8\u5316\u7684\u662f\u6625\u5b63\u6d4b\u8bd5\u8003\u5b8c\u4e4b\u540e\uff0c\u6211\u8003\u7684\u7a00\u70c2\uff0c\u53ea\u6709135\u5206\uff0c\u5f53\u65f6\u540c\u673a\u623f\u7684\u4eba\u5df2\u7ecf\u5f00\u59cb\u72af\u6101\u81ea\u5df1\u80fd\u4e0d\u80fd\u8fdb\u7701\u961f\u4e86\uff08\u90a3\u4f4d\u8003\u4e86260\u5206\uff09\uff0c\u8bf4\u771f\u7684\u8fd9\u65f6\u5019\u6211\u624d\u5f00\u59cb\u660e\u767d\u8fd9\u4e2a\u5dee\u8ddd\u4e4b\u5927\u3002<\/p>\n<p>\u8c01\u4e0d\u60f3\u8fdb\u7701\u961f\u5462\uff0c\u4e8e\u662f\u5c31\u5f00\u59cb\u5377\u554a\uff0c\u7167\u8fd9\u5927\u7eb2\u5b66\u81ea\u5df1\u6ca1\u5b66\u8fc7\u7684\u65b0\u7b97\u6cd5\uff0c\u8bf4\u5b9e\u8bdd\u5b66\u7684\u771f\u7684\u5f88\u8d39\u52b2\uff0c\u4f46\u662f\u5b66\u5b8c\u4e4b\u540e\u53d1\u73b0\u66fe\u7ecf\u62c9\u4e0b\u7684\u4e1c\u897f\u81ea\u7136\u800c\u7136\u7684\u5c31\u4f1a\u4e86\uff0c\u8fd9\u4e5f\u7b97\u662f\u8282\u7701\u4e86\u4e00\u4e9b\u65f6\u95f4\uff0c\u90a3\u6bb5\u65f6\u95f4\u91cc\u6211\u4e5f\u6709\u7740\u53ca\u5176\u4e25\u91cd\u7684\u7cbe\u795e\u5185\u8017\uff0c\u6574\u4e2a\u4eba\u7684\u7cbe\u795e\u72b6\u6001\u5dee\u7684\u8981\u6b7b\uff0c\u4e00\u8fb9\u5b66\u7740whk\u4e00\u8fb9\u5377\u7740\u7ade\u8d5b\uff0c\u5f53\u65f6\u4e3a\u4e86\u7f13\u89e3\u5dee\u7684\u8981\u6b7b\u7684\u7cbe\u795e\u72b6\u6001\u8fd8\u5728\u505a\u4e0d\u4e86\u9898\u7684\u65f6\u5019\u5199\u5199\u5c0f\u8bf4\uff08\u867d\u7136\u65ad\u66f4\u4e86\uff09\u3002<\/p>\n<p>\u4e4b\u540e\u8003\u7684\u7701\u9009\u8fd8\u662f\u56e0\u4e3a\u5b9e\u529b\u4e0d\u8db3\u5bc4\u6389\u4e86\uff0c\u7701\u9009\u4e4b\u540e\u6211\u8fd8\u662f\u6709\u7740\u4e00\u4e9b\u8ff7\u4e4b\u81ea\u4fe1\u7684\uff0c\u8fd8\u662f\u5728\u5377\uff0c\u90a3\u6bb5\u65f6\u95f4\u7684\u5b9e\u529b\u63d0\u5347\u771f\u7684\u5f88\u5927\u3002<\/p>\n<p>\u5047\u671f\u7684\u65f6\u5019\u673a\u623f\u91cc\u51e0\u4e2a\u4eba\uff08\u5305\u62ec\u6211\uff09\u53bb\u4e86\u4e1c\u5e08\u96c6\u8bad\uff0c\u5f53\u65f6\u5176\u5b9e\u5f88\u9893\uff0c\u6240\u4ee5\u771f\u7684\u6d6a\u8d39\u4e86\u5f88\u591a\u65f6\u95f4\uff0c\u4e5f\u8bb8\u8fd9\u4e5f\u662f\u6211\u4e4b\u540e\u51b3\u5b9a\u9000\u5f79\u7684\u4f0f\u7b14\u5427\u3002<\/p>\n<p>\u5176\u5b9e\u96c6\u8bad\u56de\u6765\u5230\u8003CSP\u7b2c\u4e8c\u8f6e\u4e4b\u524d\u6211\u90fd\u662f\u60f3\u8fdb\u7701\u961f\u7684\uff0c\u4e5f\u662f\u5728\u903c\u7740\u81ea\u5df1\u5b66\u5b66\u7740\u8d39\u52b2\u4f46\u662f\u5e94\u8be5\u5b66\u7684\u7b97\u6cd5\uff0c\u90a3\u4e00\u6bb5\u7684\u7cbe\u795e\u72b6\u6001\u66f4\u662f\u5dee\u7684\u8981\u6b7b\u3002<\/p>\n<p>\u8003CSP\u7684\u65f6\u5019\u88abT2\u548cT3\u521b\u98de\u4e86\uff0c\u6216\u8bb8\u6211\u4e5f\u662f\u771f\u7684\u625b\u4e0d\u4f4f\u4e86\uff0c\u4fbf\u6253\u7b97NOIP\u4e4b\u540e\u76f4\u63a5\u9000\u5f79\uff0c\u4e5f\u7b97\u662f\u4e00\u79cd\u89e3\u8131\u5427\u3002<\/p>\n<hr>\n<p>\u56de\u60f3\u4e00\u4e0b\u8fd9\u4e00\u5e74\u591a\uff0c\u4ece\u4e00\u70b9\u7f16\u7a0b\u90fd\u4e0d\u4f1a\u5230\u5b66\u4f1a\u4e86\u8fd9\u4e48\u591a\uff0c\u6536\u83b7\u771f\u7684\u662f\u5f88\u5927\u3002<\/p>\n<p>\u4e5f\u8bb8\u662f\u7b49\u5230\u6628\u5929\u7684\u6a21\u62df\u8d5b\u6211\u8003\u4e86\u7b2c\u4e00\uff0c\u4f46\u662f\u5728\u4e24\u4eba\u6ca1\u8003\u4ee5\u53ca\u4e00\u4e2a\u4eba\u6302\u4e8660\u5206\u7684\u60c5\u51b5\u4e0b\uff0c\u4ed6\u751a\u81f3\u80e1\u51fa\u4e86T4\u518d\u7ed9\u6211\u4e24\u4e2a\u5c0f\u65f6\u90fd\u60f3\u4e0d\u51fa\u6765\u7684\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\uff0c\u624d\u6df1\u5207\u5730\u610f\u8bc6\u5230\u5dee\u8ddd\u3002<\/p>\n<p>\u8fd9\u4e5f\u5c31\u662f\u4e00\u4e2a\u6ca1\u5929\u8d4b\u7684\u4eba\u7684\u65e0\u8da3\u7684\u6545\u4e8b\u3002<\/p>\n<p>\u6211OI\u751f\u6daf\u6700\u5927\u7684\u9057\u61be\u5e94\u8be5\u5c31\u662f\u6211\u7684\u5b66\u5f1f\u4eec\u4e00\u70b9\u90fd\u4e0d\u53ef\u7231\uff0c\u54fc\u3002<\/p>\n<p>\u4e8e2025\u5e748\u670827\u65e5\u8865\u6863\uff1a\u5982\u679c\u6709\u5b66\u5f1f\u5b66\u59b9\u4eec\u770b\u5230\u8fd9\u91cc\uff0c\u90a3\u4e48\u5728\u6b64\u795d\u5404\u4f4d\u524d\u7a0b\u4f3c\u9526\uff0c\u5f53\u7136\u5bf9\u4e8e\u6211\u6765\u8bf4\uff0c\u6211\u7684\u9ad8\u8003\u70b8\u6389\u4e86\uff0c\u4f46\u662f\u5982\u679c\u8ba9\u6211\u91cd\u6765\u4e00\u904d\u7684\u8bdd\uff0c\u6211\u8fd8\u662f\u4f1a\u6765\u53c2\u52a0\u7ade\u8d5b\uff0c\u56e0\u4e3a\u6211\u76f8\u4fe1\u518d\u6765\u4e00\u6b21\u7684\u6211\u4f1a\u6bd4\u8fd9\u6b21\u505a\u7684\u66f4\u597d\uff0c\u6211\u4e0d\u4f1a\u540e\u6094\u3002<\/p>"},{"title":"01\u5206\u6570\u89c4\u5212\u5b66\u4e60\u7b14\u8bb0","link":"https:\/\/rechenz.github.io\/post\/01%E5%88%86%E6%95%B0%E8%A7%84%E5%88%92%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","pubDate":"Thu, 16 Nov 2023 17:48:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/01%E5%88%86%E6%95%B0%E8%A7%84%E5%88%92%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","description":"<p>\u8d77\u56e0\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P1642\" target=\"_blank\" rel=\"noopener\"\n >P1642 \u89c4\u5212<\/a><\/p>\n<p>\u8bf4\u5b9e\u8bdd\u6211\u7684\u5370\u8c61\u91cc\u662f\u505a\u8fc7\u8fd9\u79cd\u9898\u7684\uff0c\u4f46\u662f\u5f53\u65f6\u597d\u50cf\u7406\u89e3\u540e\u5c31\u8dd1\u8def\u4e86\uff0c\u73b0\u5728\u6765\u590d\u4e60\u4e00\u4e0b\u3002<\/p>\n<p>\u4ec0\u4e48\u662f01\u5206\u6570\u89c4\u5212\u5462?<\/p>\n<p>\u5176\u5b9e\u5c31\u662f\u8ba9\u4f60\u8dd1\u4e00\u4e2a01\u80cc\u5305\uff0c\u4f46\u662f\u7269\u54c1\u6709\u4e09\u4e2a\u6743\u503c\uff0c\u91cd\u91cf\u90fd\u4e3a1\uff0c\u7136\u540e\u8ba9\u4f60\u6c42\u9009\u7684\u7269\u54c1\u7684\u5269\u4e0b\u4e24\u4e2a\u6743\u503c\u6bd4\u503c\u6700\u5927\uff0c\u4e5f\u5c31\u662f\u6027\u4ef7\u6bd4\u3002<\/p>\n<p>\u8fd9\u79cd\u4e1c\u897f\u5728\u6ca1\u6709\u9009\u62e9\u4f9d\u8d56\u5173\u7cfb\u7684\u60c5\u51b5\u4e0b\u770b\u8d77\u6765\u786e\u5b9e\u53ef\u4ee5\u8d2a\u5fc3\uff0c\u4f46\u662f\u8fd9\u6837\u5c31\u6ca1\u610f\u601d\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u6765\u8bf4\u8bf4\u6709\u4f9d\u8d56\u5173\u7cfb\u600e\u4e48\u6c42\uff0c\u5bf9\u4e8e\u6700\u666e\u901a\u768401\u5206\u6570\u89c4\u5212\u95ee\u9898\u6765\u8bf4\u4e00\u822c\u90fd\u662f\u4e8c\u5206\u7b54\u6848\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u8981\u6c42\u7684\u90a3\u4e2a\u6700\u4f18\u7684\u6027\u4ef7\u6bd4\u3002<\/p>\n<p>\u4e4b\u540e\u6211\u4eec\u6839\u636e\u8fd9\u4e2a\u5e73\u5747\u6027\u4ef7\u6bd4\uff0c\u53cd\u63a8\u51fa\u4e00\u4e2a\u7269\u54c1\u76f8\u5bf9\u4e8e\u5e73\u5747\u503c\u7684\u8d21\u732e\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u5927\u529b\u7528\u5404\u79cd\u5404\u6837\u7684dp\u6c42\u51fa\u5f53\u524d\u7684\u6700\u5927\u503c\u4e86\uff0c\u5982\u679c\u5927\u4e8e0\u5c31\u8bf4\u660e\u8fd8\u6709\u4f18\u5316\u7a7a\u95f4\uff0c\u53cd\u4e4b\u5219\u6ca1\u6709\u3002<\/p>\n<p>\u8981\u9000\u5f79\u4e86\uff0c\u4ec0\u4e48\u6700\u4f18\u6bd4\u7387\u751f\u6210\u6811\uff0c\u4ec0\u4e48\u6700\u4f18\u6bd4\u7387\u73af\u4e5f\u4e0d\u6253\u7b97\u5b66\uff0c\u5c31\u8fd9\u6837\u5427\u3002<\/p>"},{"title":"\u5173\u4e8e\u52a8\u6001\u89c4\u5212\u7684\u8f6c\u79fb1","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8E%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%9A%84%E8%BD%AC%E7%A7%BB1\/","pubDate":"Wed, 01 Nov 2023 13:40:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8E%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%9A%84%E8%BD%AC%E7%A7%BB1\/","description":"<p>\u5bf9\u4e8e\u4e00\u9053dp\u9898\uff0c\u5b83\u53ef\u80fd\u8ba9\u4f60\u8f6c\u79fb\u7684\u65f6\u5019\u7ef4\u62a4\u4e24\u4e2a\u4f18\u5148\u7ea7\uff0c\u90a3\u4e48\u6211\u4eec\u66b4\u529b\u4e00\u70b9\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\u4e24\u4e2a\u6761\u4ef6\u7684\u8bdd\u5c31\u4e0d\u8f6c\u79fb\uff0c\u6bd4\u5982\u6c42\u4e24\u4e2a\u6700\u5c0f\u503c\uff0c\u603b\u4f1a\u6709\u4e00\u4e2a\u662f\u6700\u4f18\u5148\u8003\u8651\uff0c\u90a3\u4e48\u9009\u7684\u5982\u679c\u8d85\u51fa\u7b2c\u4e00\u4f18\u5148\u7ea7\u7684\u8bdd\u5c31\u4e00\u5b9a\u662f\u9519\u8bef\u7684\uff0c\u6240\u4ee5\u5728\u5c0f\u4e8e\u7b49\u4e8e\u7b2c\u4e00\u4f18\u5148\u7ea7\u7684\u65f6\u5019\u518d\u53bb\u8003\u8651\u7b2c\u4e8c\u4f18\u5148\u7ea7\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/CF730J\" target=\"_blank\" rel=\"noopener\"\n >Bottles<\/a><\/p>"},{"title":"P6413 [COCI2008-2009#3] NAJKRACI \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p6413\/","pubDate":"Tue, 31 Oct 2023 21:39:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p6413\/","description":"<p>\u4e4b\u524d\u6ca1\u6709\u63a5\u89e6\u8fc7\u6700\u77ed\u8def\u56fe\uff0c\u9000\u5f79\u524d\u6b63\u597d\u8d81\u8fd9\u9053\u9898\u5b66\u4e60\u4e00\u4e0b\u3002<\/p>\n<p>\u5176\u5b9e\u6700\u77ed\u8def\u56fe\u6ca1\u6709\u591a\u5c11\u4e1c\u897f\uff0c\u4f46\u662f\u8003\u5230\u7684\u65f6\u5019\u5c31\u5f88\u6709\u7528 <del>\u5e9f\u8bdd<\/del>\u3002<\/p>\n<p>\u9996\u5148\u5bf9\u4e8e\u4e00\u5f20\u56fe\u6765\u8bf4\uff0c\u4ee5\u4e00\u4e2a\u70b9\u6765\u8dd1\u5355\u6e90\u6700\u77ed\u8def\u7684\u8bdd\uff0c\u90a3\u4e48\u8fd9\u4e2a\u8d77\u70b9\u5230\u6240\u6709\u70b9\u7684\u6700\u77ed\u8def\u5fc5\u5b9a\u6784\u6210\u4e00\u5f20 $\\texttt{DAG}$\uff0c\u90a3\u4e48\u8fd9\u5c31\u662f\u5f88\u4f18\u79c0\u7684\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u66f4\u6781\u7aef\u4e00\u70b9\uff0c\u7528\u5947\u602a\u7684\u65b9\u5f0f\u89c4\u5b9a\uff08\u5f53\u7136\u4e5f\u53ef\u80fd\u76f4\u63a5\u8bf4\uff09\u4e24\u70b9\u95f4\u7684\u6700\u77ed\u8def\u6709\u4e14\u53ea\u6709\u4e00\u6761\uff0c\u90a3\u4e48\u6211\u4eec\u8dd1\u51fa\u6765\u7684\u5c31\u53d8\u6210\u4e86\u4e00\u9897\u6700\u77ed\u8def\u6811\u3002<\/p>\n<p>\u6765\u770b\u8fd9\u9053\u9898\uff0c\u9898\u9762\u975e\u5e38\u7b80\u4ecb\uff0c\u53d1\u73b0\u8fd9\u9053\u9898\u4e2d\u7684\u8fb9\u5982\u679c\u4e0d\u88ab\u4efb\u4f55\u6700\u77ed\u8def\u7ecf\u8fc7\u7684\u8bdd\u4fbf\u662f\u6beb\u65e0\u4f5c\u7528\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8dd1\u51fa\u6700\u77ed\u8def\u56fe\uff0c\u7136\u540e\u4fbf\u662f\u7528\u62d3\u6251\u6392\u5e8f\u5728 $\\texttt{DAG}$ \u4e0a\u8fdb\u884c\u9012\u63a8\u8ba1\u6570\u3002<\/p>\n<p>\u56e0\u4e3a\u9898\u4e2d\u7684\u6570\u636e\u8303\u56f4\u5f88\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u66b4\u529b\u5730\u679a\u4e3e\u8d77\u70b9\uff0c\u4ee5\u679a\u4e3e\u7684\u8d77\u70b9\u8dd1\u5355\u6e90\u6700\u77ed\u8def\uff0c\u7136\u540e\u5bf9\u8dd1\u51fa\u6765\u7684 $\\texttt{DAG}$ \u8fdb\u884c\u7b54\u6848\u7d2f\u52a0\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<p>\u4f46\u662f\u8981\u6ce8\u610f\u4e00\u70b9\uff0c\u6211\u4eec\u7684 $\\texttt{DAG}$ \u8981\u8fdb\u884c\u53cd\u62d3\u6251\u5e8f\uff0c\u56e0\u4e3a\u6211\u4eec\u8bb0\u5f55\u7684\u662f\u4ee5\u67d0\u4e00\u70b9\u4e3a\u8d77\u70b9\u7684 $\\texttt{DAG}$\uff0c\u4e0d\u53cd\u8fc7\u6765\u8dd1\u7684\u8bdd\u8bb0\u7684\u6570\u662f\u9519\u7684\u3002<\/p>\n<p>\u7136\u540e\u6c42\u54ea\u4e9b\u8fb9\u662f\u6700\u77ed\u8def\u7ecf\u8fc7\u7684\u8fb9\u7684\u65f6\u5019\u5176\u5b9e\u7528\u4e0a\u4e86dp\u56de\u6eaf\uff08\u56e0\u4e3a\u6700\u77ed\u8def\u7b97\u6cd5\u672c\u8d28\u5c31\u662f\u52a8\u6001\u89c4\u5212\u561b\uff09\uff0c\u6211\u4eec\u53ea\u9700\u8981\u679a\u4e3e\u8fb9\uff0c\u7136\u540e\u5224\u65ad\u662f\u5426 $dis[v]=dis[x]+e[i].wide$ \u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<p>\u7136\u540e\u5bf9\u4e8e\u8dd1\u6700\u77ed\u8def\u56e0\u4e3a\u6ca1\u6709\u8d1f\u6743\u8fb9\u6240\u4ee5\u6211\u7528\u7684\u662f\u5806\u4f18\u5316 $\\mathrm{Dijkstra}$\u3002<\/p>\n<p>\u590d\u6742\u5ea6\u5206\u6790\uff1a$\\mathrm{O}(n^2logn+n^2)$ \u7406\u8bba\u5b9e\u6d4b\u5747\u53ef\u8fc7\u3002<\/p>\n<p>\uff08\u56e0\u4e3a\u6211\u4e5f\u662f\u624d\u5b66\u6240\u4ee5\u4ee3\u7801\u6709\u6240\u501f\u9274\u5176\u4ed6\u9898\u89e3\uff09<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#define int long long\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1505<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> mod<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e9<\/span><span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">7<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,m,head[N],cnt;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Edge<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> next;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> wide;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[<span style=\"color:#ae81ff\">5005<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">adding<\/span>(<span style=\"color:#66d9ef\">int<\/span> u,<span style=\"color:#66d9ef\">int<\/span> v,<span style=\"color:#66d9ef\">int<\/span> w){\n<\/span><\/span><span style=\"display:flex;\"><span> e[<span style=\"color:#f92672\">++<\/span>cnt].to<span style=\"color:#f92672\">=<\/span>v;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].wide<span style=\"color:#f92672\">=<\/span>w;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].next<span style=\"color:#f92672\">=<\/span>head[u];\n<\/span><\/span><span style=\"display:flex;\"><span> head[u]<span style=\"color:#f92672\">=<\/span>cnt;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> cnt1[N],cnt2[N],dis[N],vis[N],ans[<span style=\"color:#ae81ff\">5005<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span>priority_queue<span style=\"color:#f92672\">&lt;<\/span>pair<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span>,<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span>,vector<span style=\"color:#f92672\">&lt;<\/span>pair<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span>,<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;&gt;<\/span>,greater<span style=\"color:#f92672\">&lt;<\/span>pair<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span>,<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;&gt;&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">dij<\/span>(<span style=\"color:#66d9ef\">int<\/span> s){\n<\/span><\/span><span style=\"display:flex;\"><span> memset(cnt1,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> cnt1);\n<\/span><\/span><span style=\"display:flex;\"><span> memset(dis,<span style=\"color:#ae81ff\">127<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> dis);\n<\/span><\/span><span style=\"display:flex;\"><span> memset(vis,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> vis);\n<\/span><\/span><span style=\"display:flex;\"><span> dis[s]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> cnt1[s]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(make_pair(dis[s],s));\n<\/span><\/span><span style=\"display:flex;\"><span> vector<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span>dot;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(q.size()){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span>q.top().second;\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(vis[x]) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> vis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> dot.push_back(x);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dis[v]<span style=\"color:#f92672\">&gt;<\/span>dis[x]<span style=\"color:#f92672\">+<\/span>e[i].wide){\n<\/span><\/span><span style=\"display:flex;\"><span> dis[v]<span style=\"color:#f92672\">=<\/span>dis[x]<span style=\"color:#f92672\">+<\/span>e[i].wide;\n<\/span><\/span><span style=\"display:flex;\"><span> cnt1[v]<span style=\"color:#f92672\">=<\/span>cnt1[x];\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(make_pair(dis[v],v));\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span> <span style=\"color:#66d9ef\">if<\/span>(dis[x]<span style=\"color:#f92672\">+<\/span>e[i].wide<span style=\"color:#f92672\">==<\/span>dis[v]){\n<\/span><\/span><span style=\"display:flex;\"><span> cnt1[v]<span style=\"color:#f92672\">+=<\/span>cnt1[x];\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> reverse(dot.begin(),dot.end());\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">auto<\/span> x:dot){\n<\/span><\/span><span style=\"display:flex;\"><span> cnt2[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dis[v]<span style=\"color:#f92672\">==<\/span>dis[x]<span style=\"color:#f92672\">+<\/span>e[i].wide){\n<\/span><\/span><span style=\"display:flex;\"><span> cnt2[x]<span style=\"color:#f92672\">=<\/span>(cnt2[x]<span style=\"color:#f92672\">+<\/span>cnt2[v])<span style=\"color:#f92672\">%<\/span>mod;\n<\/span><\/span><span style=\"display:flex;\"><span> ans[i]<span style=\"color:#f92672\">+=<\/span><span style=\"color:#ae81ff\">1ll<\/span><span style=\"color:#f92672\">*<\/span>cnt1[x]<span style=\"color:#f92672\">%<\/span>mod<span style=\"color:#f92672\">*<\/span>cnt2[v]<span style=\"color:#f92672\">%<\/span>mod;\n<\/span><\/span><span style=\"display:flex;\"><span> ans[i]<span style=\"color:#f92672\">%=<\/span>mod;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">signed<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%lld%lld&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>m);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s1,s2,s3;\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%lld%lld%lld&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>s1,<span style=\"color:#f92672\">&amp;<\/span>s2,<span style=\"color:#f92672\">&amp;<\/span>s3);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(s1,s2,s3);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dij(i);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%lld<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>,ans[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"01BFS\u5b66\u4e60\u7b14\u8bb0","link":"https:\/\/rechenz.github.io\/post\/01bfs%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","pubDate":"Wed, 25 Oct 2023 10:29:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/01bfs%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0\/","description":"<p>\u672c\u4eba\u968f\u673a\u8df3\u9898\u5230\u4e86\u4e00\u9053\u770b\u8d77\u6765\u662f\u6700\u77ed\u8def\u7684\u9898\uff0c\u4f46\u662f\u672c\u4eba\u5e76\u4e0d\u60f3\u53bb\u66b4\u529b\u5efa\u56fe<del>\u61d2<\/del>\uff0c\u53d1\u73b0\u5982\u679c\u62bd\u8c61\u6210\u4e00\u5f20\u56fe\u7684\u8bdd\u8fb9\u6743\u53ea\u6709 $0$ \u6216\u8005 $1$\uff0c\u4e8e\u662f\u53bb\u5b66\u4e86\u4e2a01BFS\u3002<\/p>\n<p>\u4ec0\u4e48\u662f01BFS\u5462\uff0c\u5176\u5b9e\u8fd9\u662f\u4e00\u79cd\u6700\u77ed\u8def\u7684\u4f18\u5316\uff0c\u6211\u4eec\u90fd\u77e5\u9053BFS\u8981\u7528\u5230queue\u6765\u7ef4\u62a4\u6b63\u786e\u6027\uff0c\u4f46\u662f\u8fd9\u5728\u627e\u8fb9\u6743\u4e0d\u76f8\u7b49\u7684\u6700\u77ed\u8def\u91cc\u5c31\u5f88\u96be\u53d7\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ed9\u4ed6\u89c4\u5b9a\u4e00\u4e2a\u8f6c\u79fb\u987a\u5e8f\u3002<\/p>\n<p>\u6211\u4eec\u628aqueue\u6362\u6210deque\uff0c\u5982\u679c\u8fd9\u6761\u8fb9\u8fb9\u6743\u662f1\u7684\u8bdd\u5c31\u653e\u5728\u961f\u5c3e\uff0c\u5426\u5219\u653e\u5728\u961f\u9996\uff0c\u53c2\u8003dij\u91ccpriority_queue\u7684\u8bc1\u660e\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u627e\u5230\u6027\u8d28\u624b\u52a8\u6a21\u62df\u4e86\u4e00\u4e2a\u4f18\u5148\u961f\u5217\uff0c\u5e76\u4e14\u6211\u4eec\u7684\u590d\u6742\u5ea6\u662f\u4f18\u79c0\u7684 $O(n)$\uff0c\u4ee5\u4e3a\u5c11\u4e86\u4e00\u4e2a\u5806\u7684log\uff0c\u5c31\u5f88\u4f18\u79c0\u3002<\/p>\n<p>\u5f53\u7136\u9002\u7528\u8303\u56f4\u6709\u70b9\u7a84\uff0c\u53ea\u80fd\u5728\u8fb9\u6743\u4e3a $0$ \u548c\u4e00\u79cd\u5176\u4ed6\u6b63\u6570\u4e2d\u4f7f\u7528\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P1849\" target=\"_blank\" rel=\"noopener\"\n >P1849 [USACO12MAR] Tractor S<\/a><\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1005<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,sx,sy,a[N][N],t[N][N];\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> stx[<span style=\"color:#ae81ff\">6<\/span>]{<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">0<\/span>};\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> sty[<span style=\"color:#ae81ff\">6<\/span>]{<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#ae81ff\">1<\/span>};\n<\/span><\/span><span style=\"display:flex;\"><span>deque<span style=\"color:#f92672\">&lt;<\/span>pair<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span>,<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">BFS<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> q.push_front(make_pair(sx,sy));\n<\/span><\/span><span style=\"display:flex;\"><span> memset(t,<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> t);\n<\/span><\/span><span style=\"display:flex;\"><span> t[sx][sy]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(q.size()){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span>q.front().first;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> y<span style=\"color:#f92672\">=<\/span>q.front().second;\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop_front();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;i<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#ae81ff\">4<\/span>;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> tx,ty;\n<\/span><\/span><span style=\"display:flex;\"><span> tx<span style=\"color:#f92672\">=<\/span>x<span style=\"color:#f92672\">+<\/span>stx[i];\n<\/span><\/span><span style=\"display:flex;\"><span> ty<span style=\"color:#f92672\">=<\/span>y<span style=\"color:#f92672\">+<\/span>sty[i];\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(tx<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#ae81ff\">0<\/span><span style=\"color:#f92672\">||<\/span>tx<span style=\"color:#f92672\">&gt;=<\/span>N) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(ty<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#ae81ff\">0<\/span><span style=\"color:#f92672\">||<\/span>ty<span style=\"color:#f92672\">&gt;=<\/span>N) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(t[tx][ty]<span style=\"color:#f92672\">!=-<\/span><span style=\"color:#ae81ff\">1<\/span>) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[tx][ty]){\n<\/span><\/span><span style=\"display:flex;\"><span> t[tx][ty]<span style=\"color:#f92672\">=<\/span>t[x][y]<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> q.push_back(make_pair(tx,ty));\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> t[tx][ty]<span style=\"color:#f92672\">=<\/span>t[x][y];\n<\/span><\/span><span style=\"display:flex;\"><span> q.push_front(make_pair(tx,ty));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>sx,<span style=\"color:#f92672\">&amp;<\/span>sy);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s1,s2;\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>s1,<span style=\"color:#f92672\">&amp;<\/span>s2);\n<\/span><\/span><span style=\"display:flex;\"><span> a[s1][s2]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> BFS();\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,t[<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>]);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"\u5173\u4e8e\u9700\u8981\u5904\u7406\u590d\u6742\u4f9d\u8d56\u5173\u7cfb\u7684\u9898","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8E%E9%9C%80%E8%A6%81%E5%A4%84%E7%90%86%E5%A4%8D%E6%9D%82%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E7%9A%84%E9%A2%98\/","pubDate":"Tue, 24 Oct 2023 19:37:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8E%E9%9C%80%E8%A6%81%E5%A4%84%E7%90%86%E5%A4%8D%E6%9D%82%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E7%9A%84%E9%A2%98\/","description":"<p>\u591a\u8003\u8651\u56fe\u8bba\u8f6c\u5316\uff0c\u6bd4\u5982\u6c42\u89e3\u4f9d\u8d56\u5173\u7cfb\u4e2d\u7684\u6700\u5c0f\u503c\uff0c\u7b2c\u4e00\u773c\u5bb9\u6613\u5f00\u6210dp\uff0c\u6ca1\u601d\u8def\u65f6\u4e0d\u59a8\u60f3\u60f3\u6c42\u89e3\u8fde\u901a\u6027\u7684\u6700\u503c\u7b97\u6cd5\uff0c\u6700\u5c0f\u751f\u6210\u6811\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P5994\" target=\"_blank\" rel=\"noopener\"\n >P5994 [PA2014] Kuglarz<\/a><\/p>"},{"title":"\u5173\u4e8edp\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u7684\u8bbe\u8ba13","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A13\/","pubDate":"Tue, 24 Oct 2023 15:16:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A13\/","description":"<p>\u5bf9\u4e8e\u4e00\u4e9b\u9700\u8981\u4f18\u5316\u7a7a\u95f4\u7684dp\u9898\uff0c\u5355\u7eaf\u5730\u8ba9dp\u65b9\u7a0b\u6bcf\u4e00\u7ef4\u8868\u793a\u4e00\u4e2a\u6761\u4ef6\u7684\u8bdd\u65e0\u6cd5\u786e\u5207\u8868\u793a\u51fa\u4e00\u4e2a\u65e0\u540e\u6548\u6027\u7684\u72b6\u6001\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u53e6\u8fd9\u4e2a\u65b9\u7a0b\u52a0\u4e00\u4e9b\u9650\u5236\u6761\u4ef6\uff0c\u4f46\u662f\u4e0d\u8868\u793a\u5728\u65b9\u7a0b\u91cc\uff0c\u6bd4\u5982\u5bf9\u4e8e\u4e00\u4e2a\u7ebf\u6027dp\uff0c\u6211\u4eec\u89c4\u5b9a $dp[i][j]$ \u4e3a\u5230\u7b2c $i$ \u4f4d\u9009\u62e9 $j$ \u4e2a\uff0c\u4f46\u662f\u6211\u4eec\u53e6\u5916\u89c4\u5b9a\u7b2c $i$ \u4e2a\u5fc5\u987b\u9009\uff0c\u8fd9\u6837\u5728\u4e00\u4e9b\u9898\u4e2d\u5c31\u53ef\u4ee5\u6ee1\u8db3\u65e0\u540e\u6548\u6027\u4e86\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P4182\" target=\"_blank\" rel=\"noopener\"\n >P4182 [USACO18JAN] Lifeguards P<\/a><\/p>"},{"title":"\u5173\u4e8e\u62d3\u6251\u6392\u5e8f\u7684\u5e94\u7528","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8E%E6%8B%93%E6%89%91%E6%8E%92%E5%BA%8F%E7%9A%84%E5%BA%94%E7%94%A8\/","pubDate":"Mon, 23 Oct 2023 21:39:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8E%E6%8B%93%E6%89%91%E6%8E%92%E5%BA%8F%E7%9A%84%E5%BA%94%E7%94%A8\/","description":"<p><a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P2017\" target=\"_blank\" rel=\"noopener\"\n >P2017<\/a><\/p>\n<p>\u8fd9\u9053\u9898\u7684\u8ba9\u6211\u4eec\u5bf9\u56fe\u4e2d\u7684\u65e0\u5411\u8fb9\u8fdb\u884c\u5b9a\u5411\uff0c\u90a3\u4e48\u6211\u4eec\u5148\u628a\u65e0\u5411\u8fb9\u65ad\u5f00\uff0c\u76f8\u5f53\u4e8e\u62c6\u6210\u82e5\u5e72\u4e2a\u6709\u5411\u8fde\u901a\u5757\uff0c\u7136\u540e\u6211\u4eec\u5bf9\u6240\u6709\u70b9\u8fdb\u884c\u62d3\u6251\u6392\u5e8f\u6c42\u51fa\u5b83\u4eec\u7684\u62d3\u6251\u5e8f\uff0c\u7136\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u6309\u7167\u62d3\u6251\u5e8f\u7684\u5927\u5c0f\u5173\u7cfb\u5bf9\u65e0\u5411\u8fb9\u8fdb\u884c\u5b9a\u5411\uff0c\u8bc1\u660e\u660e\u5929\u518d\u8865\u3002<\/p>\n<p>\u5f88\u597d\u6211\u6765\u8865\u8bc1\u660e\u4e86\u3002<\/p>\n<p>\u56e0\u4e3a\u6709\u591a\u4e2a\u8fde\u901a\u5757\uff0c\u6240\u4ee5\u5148\u8003\u8651\u4e00\u4e2a\u8fde\u901a\u5757\uff0c\u6211\u4eec\u53d1\u73b0\u5bf9\u4e8e\u4e00\u4e2a\u8fde\u901a\u5757\u5185\u7684\u70b9\u6765\u8bf4\uff0c\u70b9\u7684\u62d3\u6251\u5e8f\u5927\u5c0f\u5173\u7cfb\u4e00\u5b9a\u662f\u4e25\u683c\u4e0e\u5355\u72ec\u5728\u8fd9\u4e2a\u8fde\u901a\u5757\u5185\u62d3\u6251\u6392\u5e8f\u7684\u62d3\u6251\u5e8f\u76f8\u540c\uff0c\u90a3\u4e48\u5982\u679c\u6309\u7167\u4e4b\u524d\u8bf4\u7684\u90a3\u6837\u5bf9\u65e0\u5411\u8fb9\u8fdb\u884c\u5b9a\u5411\u7684\u8bdd\uff0c\u56e0\u4e3a\u5e8f\u53f7\u5c0f\u7684\u4e00\u5b9a\u53ea\u80fd\u6307\u5411\u5e8f\u53f7\u5927\u7684\uff0c\u5047\u8bbe\u7ed9\u4f60\u4e00\u5806\u6709\u5e8f\u53f7\u7684\u70b9\uff0c\u89c4\u5b9a\u53ea\u80fd\u4ece\u5e8f\u53f7\u5c0f\u7684\u70b9\u5411\u5e8f\u53f7\u5927\u7684\u70b9\u8fde\u8fb9\uff0c\u90a3\u4e48\u6211\u4eec\u53d1\u73b0\u8fd9\u6837\u65e0\u8bba\u600e\u4e48\u8fde\u5b83\u90fd\u662f\u4e00\u5f20DAG\uff0c\u6b64\u9898\u540c\u7406\u3002<\/p>"},{"title":"\u5b57\u7b26\u4e32\u8bfb\u5165\u8e29\u57511","link":"https:\/\/rechenz.github.io\/post\/%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%AF%BB%E5%85%A5%E8%B8%A9%E5%9D%911\/","pubDate":"Fri, 20 Oct 2023 10:31:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%AF%BB%E5%85%A5%E8%B8%A9%E5%9D%911\/","description":"<p>\u5bf9\u4e8e\u6709\u4e9b\u9898\u76ee\u6765\u8bf4\u6211\u4eec\u8bfb\u5165\u5b57\u7b26\u4e32\u5982\u679c\u4e0d\u60f3\u4e00\u4e2a\u4e00\u4e2a\u8bfb\u5165\u5224\u65ad\u7684\u8bdd\u6211\u4eec\u5c31\u4e00\u5b9a\u8981\u4f7f\u7528 <code>getline()<\/code> \u51fd\u6570\uff0c\u4f46\u662f\u6211\u4eec\u8981\u6ce8\u610f\u4e00\u70b9\u662f\u5982\u679c\u5728\u8981\u8bfb\u5165\u7684\u5b57\u7b26\u4e32\u524d\u9762\u8bfb\u5165\u8fc7\u5176\u4ed6\u5f62\u5f0f\u7684\u6570\u636e\uff0c\u90a3\u4e48\u8fd9\u4e2a\u51fd\u6570\u4f1a\u628a\u4e0a\u4e00\u884c\u5269\u4e0b\u6765\u7684\u6362\u884c\u7b26\u5f53\u505a\u4e00\u884c\u6765\u8bfb\u5165\uff0c\u90a3\u4e48\u6211\u4eec\u4fbf\u4f1a\u5c11\u8bfb\u5165\u4e00\u884c\u5b57\u7b26\u4e32\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5728\u8bfb\u5165\u5b57\u7b26\u4e32\u524d\u8c03\u7528\u4e00\u6b21 <code>getline()<\/code> \u51fd\u6570\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u8986\u76d6\u6389\u4e0a\u4e00\u884c\u7684\u6362\u884c\u7b26\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P1767\" target=\"_blank\" rel=\"noopener\"\n >P1767 \u5bb6\u65cf<\/a><\/p>"},{"title":"\u641c\u7d22\u8e29\u57511","link":"https:\/\/rechenz.github.io\/post\/%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%911\/","pubDate":"Thu, 19 Oct 2023 21:30:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%911\/","description":"<p>\u6709\u4e9b\u641c\u7d22\u6700\u77ed\u8def\u7a0b\u7684\u957f\u5ea6\u7684\u9898\u76ee\uff0c\u6211\u4eec\u5982\u679c\u76f4\u63a5\u8fd4\u56de\u7b2c\u4e00\u4e2a\u641c\u7d22\u5230\u7684\u7b54\u6848\u5f88\u53ef\u80fd\u662f\u9519\u7684\uff0c\u56e0\u4e3a\u6709\u4e9b\u8def\u7a0b\u8ba1\u7b97\u65b9\u5f0f\u548c\u6211\u4eec\u7684BFS\u6b65\u6570\u5e76\u4e0d\u6210\u6b63\u6bd4\uff0c\u4f46\u662f\u6211\u4eec\u77e5\u9053\u8def\u7a0b\u957f\u5ea6\u968fBFS\u6b65\u6570\u6709\u5355\u8c03\u6027\uff0c\u90a3\u4e48\u6211\u4eec\u4fbf\u9700\u8981\u5728\u641c\u7d22\u7684\u65f6\u5019\u6269\u5c55\u4e00\u70b9\u8303\u56f4\uff0c\u6bd4\u5982\u5728\u5927\u4e8e\u5f53\u524d\u6700\u5c0f\u7b54\u6848\u540e\u518d\u5c06\u8fd9\u4e2a\u70b9ban\u6389\uff0c\u8fd9\u6837\u5c31\u4f1a\u4fdd\u8bc1\u6b63\u786e\u6027\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P7663\" target=\"_blank\" rel=\"noopener\"\n >P7663 [COCI2014-2015#5] JABUKE<\/a><\/p>"},{"title":"\u5173\u4e8edp\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u7684\u8bbe\u8ba12","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A12\/","pubDate":"Wed, 18 Oct 2023 09:06:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A12\/","description":"<p>\u5bf9\u4e8e\u4e00\u4e9b\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u8f83\u597d\u5199\u7684dp\u9898\uff0c\u4f46\u662f\u590d\u6742\u5ea6\u5f88\u96be\u770b\uff0c\u5e76\u4e14\u5f88\u96be\u5728\u6570\u5b66\u65b9\u9762\u4e0a\u8fdb\u884c\u4f18\u5316\u7684dp\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u8003\u8651\u91cd\u6784\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\uff0c\u6bd4\u5982\u8981dp\u53cc\u7ebf\u7a0b\u64cd\u4f5c\u7684\u8bdd\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e00\u4e2a\u7ebf\u7a0b\u5199\u5728\u65b9\u7a0b\u91cc\uff0c\u53e6\u4e00\u4e2a\u8bb0\u5f55\u5728\u6570\u7ec4\u7684\u503c\u91cc\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u628a\u770b\u4f3c\u66b4\u529b\u7684\u65b9\u7a0b\u4f18\u5316\u6210\u4e00\u4e2a\u6700\u666e\u901a\u7684\u80cc\u5305\uff0c\u76f8\u5f53\u4e8e\u62bd\u8c61\u4e86\u80cc\u5305dp\u7684\u91cd\u91cf\u548c\u4ef7\u503c\uff0c\u8fd9\u6837\u7684\u65b9\u7a0b\u770b\u8d77\u6765\u6709\u4e00\u79cd\u504f\u91cd\u5173\u7cfb\uff0c\u800c\u4e14\u8fd9\u6837\u5199\u5174\u8bb8\u8fd8\u53ef\u4ee5\u5904\u7406\u4e24\u4e2a\u7ebf\u7a0b\u7684\u4f18\u5148\u7ea7\uff0c\u4f46\u662f\u6211\u8fd8\u6ca1\u89c1\u5230\u8fc7\u8fd9\u6837\u7684\u9898\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P2224\" target=\"_blank\" rel=\"noopener\"\n >P2224 [HNOI2001] \u4ea7\u54c1\u52a0\u5de5<\/a><\/p>"},{"title":"\u5173\u4e8edp\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u7684\u8bbe\u8ba11","link":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A11\/","pubDate":"Tue, 17 Oct 2023 13:54:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/%E5%85%B3%E4%BA%8Edp%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E6%96%B9%E7%A8%8B%E7%9A%84%E8%AE%BE%E8%AE%A11\/","description":"<p>\u5bf9\u4e8e\u4e00\u4e9b\u6309\u7167\u9898\u610f\u6a21\u62df\u8bbe\u8ba1 $dp$ \u6beb\u65e0\u601d\u8def\u7684\u60c5\u51b5\u4e0b\uff0c\u8003\u8651\u6b63\u96be\u5219\u53cd\uff0c\u6bd4\u5982\u8ba9\u4f60\u4ece\u4e00\u4e2a\u5b57\u7b26\u4e32\u4e2d\u5220\u53bb\u4e0d\u5408\u6cd5\u7684\u5b57\u7b26\uff0c\u8fd9\u6837\u770b\u8d77\u6765\u53ea\u6709\u66b4\u529b\uff0c\u4f46\u662f\u53cd\u8fc7\u6765\u601d\u8003\u6210\u6211\u4eec\u5728\u8fd9\u4e2a\u5b57\u7b26\u4e32\u4e2d\u6309\u987a\u5e8f\u9009\u62e9\u82e5\u5e72\u4e2a\u5b57\u7b26\u4f7f\u5176\u7ec4\u6210\u7684\u5b57\u7b26\u4e32\u5408\u6cd5\u4e14\u4ee3\u4ef7\u6700\u5c0f\uff0c\u90a3\u4e48\u8fd9\u6837\u5c31\u5f88\u5bb9\u6613\u8bbe\u8ba1\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u4e86\u3002<\/p>\n<p>\u53c2\u8003\u9898\u76ee\uff1a<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P2187\" target=\"_blank\" rel=\"noopener\"\n >P2187 \u5c0fZ\u7684\u7b14\u8bb0<\/a><\/p>"},{"title":"P9705 \u300cTFOI R1\u300dUnknown Graph \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p9705\/","pubDate":"Mon, 16 Oct 2023 16:40:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p9705\/","description":"<p>\u4e00\u9053\u6709\u8da3\u7b80\u5355\u7684\u6784\u9020\u9898\u3002<\/p>\n<p>\u9605\u8bfb\u9898\u9762\uff0c\u53d1\u73b0\u8fd9\u4f3c\u4e4e\u5f88\u96be\u627e\u5230\u5b8c\u7f8e\u7684\u8d2a\u5fc3\u7b56\u7565\uff0c\u90a3\u4e48\u6211\u4eec\u8003\u8651\u7f51\u7edc\u6d41\u3002<\/p>\n<p>\u5148\u8bf4\u5efa\u6a21\u65b9\u5f0f\uff1a<\/p>\n<p>\u8003\u8651\u62c6\u70b9\uff0c\u628a\u6bcf\u4e2a\u70b9\u62c6\u6210\u7f16\u53f7\u4e3a $i$ \u548c $n+i$ \u7684\u4e24\u4e2a\u70b9\u3002<\/p>\n<p>\u9996\u5148\u4ece\u8d85\u7ea7\u6e90\u70b9 $s$ \u5411\u7f16\u53f7\u4e3a $1 \\sim n$ \u7684\u6bcf\u4e00\u4e2a\u70b9\u8fde\u6d41\u91cf\u4e3a\u8fd9\u4e2a\u70b9\u51fa\u5ea6\u7684\u8fb9\u3002<\/p>\n<p>\u7136\u540e\u518d\u4ece $1 \\sim n$ \u7684\u70b9\u5411\u6bcf\u4e00\u4e2a\u7f16\u53f7\u4e3a $n+1$ \u5230 $2n$ \u6d41\u91cf\u4e3a $1$ \u7684\u8fb9\uff0c\u5f53\u7136\u56e0\u4e3a\u9898\u4e2d\u7ed9\u51fa\u4e86 $m$ \u6761\u9650\u5236\uff0c\u90a3\u4e48\u4e0d\u5bf9\u8fd9\u4e9b\u9650\u5236\u7684\u70b9\u8fdb\u884c\u8fde\u8fb9\u5c31\u597d\u4e86\u3002<\/p>\n<p>\u6700\u540e\u4ece\u7f16\u53f7\u4e3a $n+1$ \u5230 $2n$ \u7684\u70b9\u5411\u8d85\u7ea7\u6c47\u70b9 $t$ \u8fde\u4e00\u6761\u6d41\u91cf\u4e3a\u8fd9\u4e2a\u70b9\u5165\u5ea6\u7684\u8fb9\u5c31\u597d\u4e86\u3002<\/p>\n<p>\u5927\u6982\u5efa\u4e86\u4e2a\u8fd9\u4e48\u4e2a\u56fe\uff1a<\/p>\n<p><img alt=\"11\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/cdn.luogu.com.cn\/upload\/image_hosting\/v1e0uaot.png\"><\/p>\n<p>\u90a3\u4e48\u8fb9\u6570\u5c31\u662f\u8fd9\u4e2a\u7f51\u7edc\u7684\u6700\u5927\u6d41\uff08\u56e0\u4e3a\u4fdd\u8bc1\u6709\u89e3\uff09\uff0c\u81f3\u4e8e\u600e\u4e48\u8f93\u51fa\u6784\u9020\u7684\u8fb9\uff0c\u6211\u4eec\u53bb\u904d\u5386\u8fd9\u4e2a\u7f51\u7edc\u7684\u6b8b\u4f59\u6d41\u91cf\uff0c\u5982\u679c\u7b2c\u4e8c\u6b65\u5efa\u7684\u6b63\u5411\u8fb9\u7684\u6d41\u91cf\u4e3a $0$ \u90a3\u4e48\u5c31\u8bf4\u660e\u8fd9\u6761\u8fb9\u88ab\u6211\u4eec\u9009\u62e9\u4e86\uff0c\u6211\u4eec\u8f93\u51fa\u8fd9\u6761\u8fb9\u7684\u4e24\u4e2a\u8282\u70b9\u5c31\u597d\u3002<\/p>\n<p>\u7136\u540e\u56e0\u4e3a\u8fd9\u662f\u4e2a\u4e8c\u5206\u56fe\uff0c\u90a3\u4e48\u6211\u4eec\u7684\u590d\u6742\u5ea6\u5c31\u662f\u4f18\u79c0\u7684 $O(n\\sqrt n)$\u3002<\/p>\n<p>\u8fd9\u9053\u9898\u5176\u5b9e\u5c31\u662f\u76f4\u63a5\u5bf9\u7740\u9898\u610f\u8fdb\u884c\u7f51\u7edc\u6d41\u6a21\u62df\uff0c\u662f\u4e00\u9053\u5f88\u597d\u7684\u677f\u5b50\u9898\u3002<\/p>\n<p>\u5982\u679c\u8fd8\u6ca1\u7406\u89e3\u5c31\u770b\u770b\u4ee3\u7801\uff0c\u81ea\u8ba4\u4e3a\u5f88\u597d\u770b\uff08<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1005<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> inf<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e9<\/span><span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">7<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,m,in[N],out[N],head[<span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>N],cnt<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>,s,t,mp[N][N],num<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Edge<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> from;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> next;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> wide;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[<span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>N<span style=\"color:#f92672\">*<\/span>N<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">adding<\/span>(<span style=\"color:#66d9ef\">int<\/span> u,<span style=\"color:#66d9ef\">int<\/span> v,<span style=\"color:#66d9ef\">int<\/span> w){\n<\/span><\/span><span style=\"display:flex;\"><span> e[<span style=\"color:#f92672\">++<\/span>cnt].to<span style=\"color:#f92672\">=<\/span>v;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].from<span style=\"color:#f92672\">=<\/span>u;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].wide<span style=\"color:#f92672\">=<\/span>w;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].next<span style=\"color:#f92672\">=<\/span>head[u];\n<\/span><\/span><span style=\"display:flex;\"><span> head[u]<span style=\"color:#f92672\">=<\/span>cnt;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> dis[<span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>N],now[<span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#a6e22e\">BFS<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span><span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>n<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dis[i]<span style=\"color:#f92672\">=<\/span>inf;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> dis[s]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> queue<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(s);\n<\/span><\/span><span style=\"display:flex;\"><span> now[s]<span style=\"color:#f92672\">=<\/span>head[s];\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(q.size()){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span>q.front();\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\">\/\/ cout&lt;&lt;x&lt;&lt;&#34; &#34;&lt;&lt;v&lt;&lt;endl;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dis[v]<span style=\"color:#f92672\">==<\/span>inf<span style=\"color:#f92672\">&amp;&amp;<\/span>e[i].wide){\n<\/span><\/span><span style=\"display:flex;\"><span> dis[v]<span style=\"color:#f92672\">=<\/span>dis[x]<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> now[v]<span style=\"color:#f92672\">=<\/span>head[v];\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(v);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> dis[t]<span style=\"color:#f92672\">!=<\/span>inf;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">DFS<\/span>(<span style=\"color:#66d9ef\">int<\/span> x,<span style=\"color:#66d9ef\">int<\/span> sum){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(x<span style=\"color:#f92672\">==<\/span>t) <span style=\"color:#66d9ef\">return<\/span> sum;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> k,res<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>now[x];i<span style=\"color:#f92672\">&amp;<\/span><span style=\"color:#960050;background-color:#1e0010\">\u2211<\/span>i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> now[x]<span style=\"color:#f92672\">=<\/span>i;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dis[v]<span style=\"color:#f92672\">==<\/span>dis[x]<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>e[i].wide){\n<\/span><\/span><span style=\"display:flex;\"><span> k<span style=\"color:#f92672\">=<\/span>DFS(v,min(e[i].wide,sum));\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(k<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">0<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dis[v]<span style=\"color:#f92672\">=<\/span>inf;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> e[i].wide<span style=\"color:#f92672\">-=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> e[i<span style=\"color:#f92672\">^<\/span><span style=\"color:#ae81ff\">1<\/span>].wide<span style=\"color:#f92672\">+=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> sum<span style=\"color:#f92672\">-=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> res<span style=\"color:#f92672\">+=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> res;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">Dinic<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> res<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(BFS()){\n<\/span><\/span><span style=\"display:flex;\"><span> res<span style=\"color:#f92672\">+=<\/span>DFS(s,inf);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> res;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">Debug<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;x<span style=\"color:#f92672\">&lt;=<\/span><span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>n<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;x<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> cout<span style=\"color:#f92672\">&lt;&lt;<\/span>x<span style=\"color:#f92672\">&lt;&lt;<\/span><span style=\"color:#e6db74\">&#34; &#34;<\/span><span style=\"color:#f92672\">&lt;&lt;<\/span>v<span style=\"color:#f92672\">&lt;&lt;<\/span><span style=\"color:#e6db74\">&#34; &#34;<\/span><span style=\"color:#f92672\">&lt;&lt;<\/span>e[i].wide<span style=\"color:#f92672\">&lt;&lt;<\/span>endl;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>in[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>out[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>m);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s1,s2;\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>s1,<span style=\"color:#f92672\">&amp;<\/span>s2);\n<\/span><\/span><span style=\"display:flex;\"><span> mp[s1][s2]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> s<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>,t<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>n<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>n;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(i<span style=\"color:#f92672\">==<\/span>j) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(mp[i][j]) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> adding(i,j<span style=\"color:#f92672\">+<\/span>n,<span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(j<span style=\"color:#f92672\">+<\/span>n,i,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> num<span style=\"color:#f92672\">+=<\/span><span style=\"color:#ae81ff\">2<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(s,i,out[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(i,s,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>n<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span><span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(i,t,in[i<span style=\"color:#f92672\">-<\/span>n]);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(t,i,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> Debug();\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>,Dinic());\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">2<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>num;i<span style=\"color:#f92672\">+=<\/span><span style=\"color:#ae81ff\">2<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>e[i].wide){\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d %d<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>,e[i].from,e[i].to<span style=\"color:#f92672\">-<\/span>n);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P5032 \u7ecf\u9a8c \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p5032\/","pubDate":"Mon, 25 Sep 2023 15:36:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p5032\/","description":"<p>\u540c\u673a\u623f\u540c\u5b66\u627e\u5230\u7684\u9898\uff0c\u4e00\u770b $\\mathrm{tag}$\uff0c\u4ec0\u4e48\uff1f\u961f\u5217\uff1f\u4e0d\u4f1a\u600e\u4e48\u529e\uff1f<\/p>\n<p>\u5c0f\u95ee\u9898\uff0c\u56e0\u4e3a\u6211\u4f1a\u66b4\u529b\u3002<\/p>\n<p>\u9996\u5148\uff0c\u597d\u957f\u7684\u9898\u9762\uff0c\u76f4\u63a5\u770b\u7b80\u8981\u9898\u610f\uff0c\u53ef\u4ee5\u53d1\u73b0\u6211\u4eec\u53ea\u9700\u8981\u6c42\u51fa\u6700\u5927\u80fd\u5408\u6210\u5230\u591a\u5c11\u7b49\u7ea7\uff0c\u56e0\u4e3a\u6570\u5b66\u77e5\u8bc6\u8584\u5f31\uff0c\u6253\u5f00 $\\mathrm{python}$\uff0c\u53d1\u73b0\n<img alt=\"1\" loading=\"lazy\" sizes=\"(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px\" src=\"https:\/\/cdn.luogu.com.cn\/upload\/image_hosting\/i0wi8bsk.png\"><\/p>\n<p>\u65e2\u7136\u53ea\u6709 $23$ \u90a3\u4e48\u6211\u4eec\u4fbf\u53ef\u4ee5\u76f4\u63a5\u5f00\u4e00\u4e2a\u6570\u7ec4\uff08\u6876\uff09\u6765\u8bb0\u5f55\u6bcf\u4e2a\u7b49\u7ea7\u7684\u9644\u9b54\u4e66\u51fa\u73b0\u4e86\u591a\u5c11\u6b21\uff0c\u7136\u540e\u4ece\u4e0b\u5f80\u4e0a\u626b\uff0c\u4fbf\u53ef\u4ee5 $\\mathrm{O}(n)$ \u5730\u6c42\u51fa\u6700\u9ad8\u80fd\u5408\u6210\u591a\u5927\u7b49\u7ea7\u7684\u9644\u9b54\u4e66\u3002<\/p>\n<p>\u90a3\u4e48\u4e0b\u4e00\u6b65\u6211\u4eec\u5c31\u8981\u8ba1\u7b97\u5b83\u7684\u6700\u5c0f\u5408\u6210\u8d39\u7528\uff0c\u56e0\u4e3a\u5408\u6210\u7ee7\u627f\u7684\u8d39\u7528\u662f\u4e24\u8005\u4e4b\u95f4\u7684 $\\mathrm{max}$ \u52a0\u4e00\uff0c\u90a3\u4e48\u4e00\u4e2a\u660e\u663e\u7684\u8d2a\u5fc3\u7b56\u7565\u4fbf\u662f\u6bcf\u6b21\u5408\u6210\u53d6\u4e24\u4e2a\u5f53\u524d\u8d39\u7528\u6700\u5927\u7684\uff0c\u5176\u5b9e\u8fd9\u6837\u66b4\u529b\u7ef4\u62a4\u7684\u8bdd\u6709\u70b9\u9ebb\u70e6\uff0c\u4f46\u662f\u6839\u636e\u9012\u5f52\u7684\u4f18\u5148\u9009\u62e9\u6027\u5176\u5b9e\u6839\u672c\u4e0d\u7528\u7279\u610f\u7ef4\u62a4\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">long<\/span> <span style=\"color:#66d9ef\">long<\/span> <span style=\"color:#a6e22e\">cal<\/span>(<span style=\"color:#66d9ef\">int<\/span> dep){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[dep]){\n<\/span><\/span><span style=\"display:flex;\"><span> a[dep]<span style=\"color:#f92672\">--<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s1<span style=\"color:#f92672\">=<\/span>cal(dep<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s2<span style=\"color:#f92672\">=<\/span>cal(dep<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> y<span style=\"color:#f92672\">+=<\/span>s1<span style=\"color:#f92672\">+<\/span>s2;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> (max(s1,s2)<span style=\"color:#f92672\">&lt;&lt;<\/span><span style=\"color:#ae81ff\">1<\/span>)<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>\u56e0\u4e3a\u5982\u679c\u8fd9\u6837\u5199\u7684\u8bdd\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b49\u7ea7\u7684\u9644\u9b54\u4e66\u6765\u8bf4\u4e00\u5b9a\u662f\u6309\u7167\u4ece\u5c0f\u5230\u5927\u7684\u987a\u5e8f\u8fdb\u884c\u5408\u5e76\uff0c\u800c\u4e14\u56e0\u4e3a\u4e00\u5b9a\u662f\u7528\u5076\u6570\u4e2a\u8fdb\u884c\u5408\u6210\uff0c\u6240\u4ee5\u8fd9\u4f9d\u65e7\u662f\u6ee1\u8db3\u6211\u4eec\u7684\u8d2a\u5fc3\u7b56\u7565\u7684\u3002<\/p>\n<p>\u6700\u540e\u56e0\u4e3a\u4e0d\u4fdd\u8bc1\u6a21\u6570\u4e3a\u8d28\u6570\u6c42\u9006\u5143\u8fd8\u8981\u7528\u6269\u5c55\u6b27\u51e0\u91cc\u5fb7<del>\u8bf4\u5b9e\u8bdd\u6211\u89c9\u5f97\u8fd9\u5f88\u6ca1\u5fc5\u8981<\/del><\/p>\n<p>\u6700\u540e\u8fdb\u884c\u6574\u4f53\u7b97\u6cd5\u590d\u6742\u5ea6\u5206\u6790\uff0c\u8003\u8651\u9012\u5f52\u5f62\u6210\u4e86\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\u7684\u6700\u574f\u60c5\u51b5\uff0c\u53f6\u5b50\u8282\u70b9\u6570\u4fbf\u662f $\\mathrm{n}$\uff0c\u90a3\u4e48\u6839\u636e\u6811\u7684\u57fa\u672c\u77e5\u8bc6\u8fd9\u9897\u6ee1\u4e8c\u53c9\u6811\u7684\u603b\u8282\u70b9\u6570\u4f9d\u65e7\u662f $\\mathrm{n}$ \u91cf\u7ea7\u7684\uff0c\u6240\u4ee5\u603b\u4f53\u7b97\u6cd5\u590d\u6742\u5ea6 $\\mathrm{O}(n)$\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">inline<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">read<\/span>(<span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#f92672\">&amp;<\/span>x){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">char<\/span> ch<span style=\"color:#f92672\">=<\/span>getchar();x<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(<span style=\"color:#f92672\">!<\/span>isdigit(ch)) ch<span style=\"color:#f92672\">=<\/span>getchar();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(isdigit(ch)) x<span style=\"color:#f92672\">=<\/span>x<span style=\"color:#f92672\">*<\/span><span style=\"color:#ae81ff\">10<\/span><span style=\"color:#f92672\">+<\/span>ch<span style=\"color:#f92672\">-<\/span><span style=\"color:#e6db74\">&#39;0&#39;<\/span>,ch<span style=\"color:#f92672\">=<\/span>getchar();\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">10000007<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,a[N],maxn,x;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">long<\/span> <span style=\"color:#66d9ef\">long<\/span> y;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">long<\/span> <span style=\"color:#66d9ef\">long<\/span> <span style=\"color:#a6e22e\">cal<\/span>(<span style=\"color:#66d9ef\">int<\/span> dep){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[dep]){\n<\/span><\/span><span style=\"display:flex;\"><span> a[dep]<span style=\"color:#f92672\">--<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s1<span style=\"color:#f92672\">=<\/span>cal(dep<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> s2<span style=\"color:#f92672\">=<\/span>cal(dep<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> y<span style=\"color:#f92672\">+=<\/span>s1<span style=\"color:#f92672\">+<\/span>s2;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> (max(s1,s2)<span style=\"color:#f92672\">&lt;&lt;<\/span><span style=\"color:#ae81ff\">1<\/span>)<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">ex_gcd<\/span>(<span style=\"color:#66d9ef\">int<\/span> s1,<span style=\"color:#66d9ef\">int<\/span> s2,<span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#f92672\">&amp;<\/span>s3,<span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#f92672\">&amp;<\/span>s4){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(s2<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">0<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> s3<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> s4<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> s1;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> temp<span style=\"color:#f92672\">=<\/span>ex_gcd(s2,s1<span style=\"color:#f92672\">%<\/span>s2,s4,s3);\n<\/span><\/span><span style=\"display:flex;\"><span> s4<span style=\"color:#f92672\">-=<\/span>s3<span style=\"color:#f92672\">*<\/span>(s1<span style=\"color:#f92672\">\/<\/span>s2);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> temp; \n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> read(n);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> temp;\n<\/span><\/span><span style=\"display:flex;\"><span> read(temp);\n<\/span><\/span><span style=\"display:flex;\"><span> maxn<span style=\"color:#f92672\">=<\/span>max(temp,maxn);\n<\/span><\/span><span style=\"display:flex;\"><span> a[temp]<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> ans,temp<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>,judge;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>maxn<span style=\"color:#f92672\">||<\/span>temp;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> temp<span style=\"color:#f92672\">=<\/span>a[i]<span style=\"color:#f92672\">+<\/span>temp<span style=\"color:#f92672\">&gt;&gt;<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> x<span style=\"color:#f92672\">=<\/span>max(x,i);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> cal(x);\n<\/span><\/span><span style=\"display:flex;\"><span> judge<span style=\"color:#f92672\">=<\/span>ex_gcd(x,y,ans,temp);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(judge<span style=\"color:#f92672\">!=<\/span><span style=\"color:#ae81ff\">1<\/span>) <span style=\"color:#66d9ef\">return<\/span> printf(<span style=\"color:#e6db74\">&#34;-1&#34;<\/span>),<span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">else<\/span> <span style=\"color:#66d9ef\">return<\/span> printf(<span style=\"color:#e6db74\">&#34;%lld&#34;<\/span>,(ans<span style=\"color:#f92672\">%<\/span>y<span style=\"color:#f92672\">+<\/span>y)<span style=\"color:#f92672\">%<\/span>y),<span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P4645 [COCI2006-2007#3] BICIKLI \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p4645\/","pubDate":"Tue, 08 Aug 2023 20:34:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p4645\/","description":"<p>\u4e00\u9053\u5f88\u597d\u7684\u56fe\u8bba\u7ec3\u624b\u9898\u3002<\/p>\n<p>\u96be\u5f97\u9898\u610f\u5f88\u7b80\u6d01\uff0c\u5c31\u662f\u8ba9\u4f60\u8fdb\u884c\u4e00\u4e2a\u8def\u5f84\u8ba1\u6570\uff0c\u770b\u5230\u8fd9\u4e48\u7b80\u6d01\u7684\u8def\u5f84\u8ba1\u6570\u6211\u7b2c\u4e00\u773c\u60f3\u5230\u7684\u5c31\u662f\u901a\u8fc7\u62d3\u6251\u6392\u5e8f\u8fdb\u884c\u8ba1\u6570 $\\texttt{dp}$\uff0c\u5e76\u4e14\u9898\u4e2d\u8bf4\u660e\u4e86\u662f\u5355\u5411\u9053\u8def\uff0c\u90a3\u4e48\u8fd9\u5c31\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684 $\\texttt{DAG}$ \u4e0a $\\texttt{dp}$\u3002<\/p>\n<p>\u4f46\u662f\u4ecd\u7136\u6709\u4e00\u4e9b\u5730\u65b9\u9700\u8981\u6ce8\u610f\uff0c\u56e0\u4e3a\u9898\u4e2d\u5e76\u6ca1\u6709\u4fdd\u8bc1\u8fd9\u5f20\u56fe\u662f\u4e00\u5f20\u6709\u5411\u65e0\u73af\u56fe\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u53bb\u5224\u65ad\u6709\u73af\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u8dd1\u4e00\u904d $\\texttt{Tarjan}$ \u7b97\u6cd5\u4fbf\u53ef\u4ee5\u627e\u51fa\u8fd9\u4e2a\u56fe\u4e2d\u6240\u6709\u7684\u73af\uff0c\u4f46\u662f\u9898\u4e2d\u7684\u6240\u9700\u8981\u7684\u7279\u5224\u5f53\u4e14\u4ec5\u5f53\u8def\u5f84\u6570\u4e3a\u65e0\u7a77\u65f6\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u627e\u7684\u662f\u56fe\u4e2d\u5bf9\u4ece $\\texttt{1}$ \u53f7\u8282\u70b9\u5230 $\\texttt{2}$ \u53f7\u8282\u70b9\u8def\u5f84\u6570\u6709\u8d21\u732e\u7684\u73af\u3002<\/p>\n<p>\u81f3\u4e8e\u5982\u4f55\u5224\u65ad\u8fd9\u4e2a\u73af\u662f\u5426\u5bf9\u8def\u5f84\u6570\u6709\u8d21\u732e\uff0c\u8fd9\u4e2a\u73af\u5bf9\u8def\u5f84\u6570\u6709\u8d21\u732e\u5f53\u4e14\u4ec5\u5f53\u53ef\u4ee5\u4ece $\\texttt{1}$ \u53f7\u8282\u70b9\u8d70\u5230\u8fd9\u4e2a\u73af\u4e0a\u5e76\u4e14\u53ef\u4ee5\u4ece\u8fd9\u4e2a\u73af\u8d70\u5230 $\\texttt{2}$ \u53f7\u8282\u70b9\u4e0a\u3002<\/p>\n<p>\u60f3\u8981\u77e5\u9053\u80fd\u5426\u4ece $\\texttt{1}$ \u53f7\u8282\u70b9\u5230\u73af\u5f88\u7b80\u5355\uff0c\u641c\u4e00\u904d\u5c31\u597d\u4e86\uff0c\u4f46\u662f\u80fd\u5426\u4ece\u73af\u5230\u8fbe $\\texttt{2}$ \u53f7\u8282\u70b9\u5c31\u662f\u53e6\u4e00\u4e2a\u95ee\u9898\u4e86\uff0c\u6b63\u6240\u8c13\u6b63\u96be\u5219\u53cd\uff0c\u6211\u4eec\u53e6\u5916\u5efa\u51fa\u4e00\u4efd\u53cd\u56fe\u4ece $\\texttt{2}$ \u53f7\u8282\u70b9\u8dd1\u4e00\u904d\u548c\u521a\u624d\u4e00\u6837\u7684\u5c31\u597d\u4e86\uff0c\u8fd9\u4e5f\u662f\u56fe\u8bba\u9898\u4e2d\u5e38\u7528\u7684\u6280\u5de7\u3002<\/p>\n<p>\u53e6\u5916\u4e00\u4e2a\u6ce8\u610f\u4e8b\u9879\uff0c\u62d3\u6251\u6392\u5e8f\u4e2d\u6211\u4eec\u9700\u8981\u6839\u636e\u4e0b\u4e00\u4e2a\u7684\u5165\u5ea6\u6765\u5224\u65ad\u662f\u5426\u53ef\u4ee5\u5165\u961f\uff0c\u4f46\u662f\u6709\u4e9b\u70b9\u548c\u8fb9\u662f\u6839\u672c\u904d\u5386\u4e0d\u5230\u7684\uff0c\u90a3\u4e48\u5c31\u4f1a\u8d70\u5230\u534a\u8def\u5c31\u5bc4\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5728\u5224\u65ad\u662f\u5426\u80fd\u4ece $\\texttt{1}$ \u53f7\u8282\u70b9\u5230\u73af\u7684\u65f6\u5019\u987a\u4fbf\u8bb0\u5f55\u4e00\u4e0b\u6709\u7528\u7684\u5165\u5ea6\uff0c\u5f53\u7136\u8bb0\u5f97\u8981\u7528 $\\texttt{BFS}$ \u4e0d\u7136\u4f1a\u591a\u52a0\u51fa\u4e00\u4e9b\u5165\u5ea6\u3002<\/p>\n<p>\u65f6\u95f4\u590d\u6742\u5ea6:$\\mathrm{O}(n)$\u3002<\/p>\n<p>\uff08\u6ce8\uff1a\u672c\u9898\u8bc8\u9a97\u6570\u636e\uff0c\u8bb0\u5f97\u5f00 $10^5$\uff09<\/p>\n<h1 id=\"code\">code\n<\/h1><div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#define int long long\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">100004<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> mod<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e9<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,m,head[N],cnt,in[N],dis[N],head1[N],cnt1;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Edge<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">int<\/span> to;\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">int<\/span> next;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[N],e1[N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">adding<\/span>(<span style=\"color:#66d9ef\">int<\/span> u,<span style=\"color:#66d9ef\">int<\/span> v){\n<\/span><\/span><span style=\"display:flex;\"><span>\te[<span style=\"color:#f92672\">++<\/span>cnt].to<span style=\"color:#f92672\">=<\/span>v;\n<\/span><\/span><span style=\"display:flex;\"><span>\te[cnt].next<span style=\"color:#f92672\">=<\/span>head[u];\n<\/span><\/span><span style=\"display:flex;\"><span>\thead[u]<span style=\"color:#f92672\">=<\/span>cnt;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">adding1<\/span>(<span style=\"color:#66d9ef\">int<\/span> u,<span style=\"color:#66d9ef\">int<\/span> v){\n<\/span><\/span><span style=\"display:flex;\"><span>\te1[<span style=\"color:#f92672\">++<\/span>cnt1].to<span style=\"color:#f92672\">=<\/span>v;\n<\/span><\/span><span style=\"display:flex;\"><span>\te1[cnt1].next<span style=\"color:#f92672\">=<\/span>head1[u];\n<\/span><\/span><span style=\"display:flex;\"><span>\thead1[u]<span style=\"color:#f92672\">=<\/span>cnt1;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> dfn[N],low[N],tot,vis[N],num,size[N],color[N];\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> check[N],check1[N];\n<\/span><\/span><span style=\"display:flex;\"><span>stack<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span> s;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">Tarjan<\/span>(<span style=\"color:#66d9ef\">int<\/span> x){<span style=\"color:#75715e\">\/\/Tarjan\u677f\u5b50\u4e0d\u591a\u8bf4\u4e86 \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\tdfn[x]<span style=\"color:#f92672\">=<\/span>low[x]<span style=\"color:#f92672\">=++<\/span>tot;\n<\/span><\/span><span style=\"display:flex;\"><span>\ts.push(x);\n<\/span><\/span><span style=\"display:flex;\"><span>\tvis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>dfn[v]){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tTarjan(v);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tlow[x]<span style=\"color:#f92672\">=<\/span>min(low[x],low[v]);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}<span style=\"color:#66d9ef\">else<\/span> <span style=\"color:#66d9ef\">if<\/span>(vis[v]){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tlow[x]<span style=\"color:#f92672\">=<\/span>min(low[x],low[v]);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">if<\/span>(dfn[x]<span style=\"color:#f92672\">==<\/span>low[x]){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tnum<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">while<\/span>(s.top()<span style=\"color:#f92672\">!=<\/span>x){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">int<\/span> temp<span style=\"color:#f92672\">=<\/span>s.top();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\ts.pop();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tvis[temp]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tsize[num]<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tcolor[temp]<span style=\"color:#f92672\">=<\/span>num;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tvis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tsize[num]<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tcolor[x]<span style=\"color:#f92672\">=<\/span>num;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\ts.pop();\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>queue<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">BFS1<\/span>(<span style=\"color:#66d9ef\">int<\/span> x){\n<\/span><\/span><span style=\"display:flex;\"><span>\tq.push(<span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\tcheck[<span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">while<\/span>(q.size()){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span>q.front();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tq.pop();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>check[v]){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\tcheck[v]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\tq.push(v);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tin[v]<span style=\"color:#f92672\">++<\/span>;<span style=\"color:#75715e\">\/\/\u8bb0\u5f55\u5165\u5ea6 \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">DFS1<\/span>(<span style=\"color:#66d9ef\">int<\/span> x){\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head1[x];i;i<span style=\"color:#f92672\">=<\/span>e1[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e1[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">if<\/span>(check1[v]) <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tcheck1[v]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tDFS1(v);\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">tuopu<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span>\tdis[<span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\tq.push(<span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">while<\/span>(q.size()){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span>q.front();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tq.pop();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">if<\/span>(check1[v]){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\tdis[v]<span style=\"color:#f92672\">+=<\/span>dis[x];\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\tdis[v]<span style=\"color:#f92672\">%=<\/span>mod;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\tin[v]<span style=\"color:#f92672\">--<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t<span style=\"color:#66d9ef\">if<\/span>(in[v]<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">0<\/span>){<span style=\"color:#75715e\">\/\/\u5165\u5ea6\u4e3a\u96f6\u624d\u80fd\u52a0 \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t\tq.push(v);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">signed<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span>\tscanf(<span style=\"color:#e6db74\">&#34;%lld%lld&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>m);\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">int<\/span> s1,s2;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tscanf(<span style=\"color:#e6db74\">&#34;%lld%lld&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>s1,<span style=\"color:#f92672\">&amp;<\/span>s2);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tadding(s1,s2);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tadding1(s2,s1);<span style=\"color:#75715e\">\/\/\u5efa\u53cd\u56fe \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>dfn[i]) Tarjan(i);\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\tcheck[<span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;<span style=\"color:#75715e\">\/\/\u8bb0\u5f55\u6b63\u56fe\u7684\u70b9\u80fd\u5426\u88ab\u904d\u5386\u5230 \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\tcheck1[<span style=\"color:#ae81ff\">2<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;<span style=\"color:#75715e\">\/\/\u540c\u4e0a\u8bb0\u5f55\u53cd\u56fe \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\tBFS1(<span style=\"color:#ae81ff\">1<\/span>);<span style=\"color:#75715e\">\/\/\u7b2c\u4e00\u904d\u8981\u7528BFS \n<\/span><\/span><\/span><span style=\"display:flex;\"><span>\tDFS1(<span style=\"color:#ae81ff\">2<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">if<\/span>(check[i]<span style=\"color:#f92672\">&amp;&amp;<\/span>size[color[i]]<span style=\"color:#f92672\">!=<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>check1[i]){\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tprintf(<span style=\"color:#e6db74\">&#34;inf<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\ttuopu();\n<\/span><\/span><span style=\"display:flex;\"><span>\tprintf(<span style=\"color:#e6db74\">&#34;%lld&#34;<\/span>,dis[<span style=\"color:#ae81ff\">2<\/span>]);\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P3112 [USACO14DEC] Guard Mark G \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p3112\/","pubDate":"Fri, 30 Jun 2023 10:48:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p3112\/","description":"<p>\u6709\u4e00\u8bf4\u4e00\u8fd9\u9053\u9898\u548c <a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P1080\" target=\"_blank\" rel=\"noopener\"\n >\u56fd\u738b\u6e38\u620f<\/a> \u5f88\u50cf\uff0c\u4f46\u662f\u591a\u4e86\u4e00\u4e2a\u9ad8\u5ea6\u7684\u7ef4\u5ea6\uff0c\u5f53\u7136\u8d77\u5148\u6211\u53ea\u8ba4\u4e3a\u7528\u8fd9\u4e2a\u5224\u65ad\u662f\u5426\u5408\u6cd5\u7136\u540e\u53d6\u6700\u4f18\u89e3\u5c31\u597d\u4e86\uff0c\u7136\u540e\u5199\u4e86\u4e00\u53d1<del>\u7206\u520757 pts<\/del>\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">25<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,h,cnt,t[N],ans<span style=\"color:#f92672\">=<\/span>INT_MAX;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Cow<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> height;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> weight;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> strength;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#a6e22e\">cmp<\/span>(Cow A,Cow B){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(B.strength<span style=\"color:#f92672\">-<\/span>A.weight<span style=\"color:#f92672\">!=<\/span>A.strength<span style=\"color:#f92672\">-<\/span>B.weight){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> A.strength<span style=\"color:#f92672\">-<\/span>B.weight<span style=\"color:#f92672\">&gt;<\/span>B.strength<span style=\"color:#f92672\">-<\/span>A.weight;\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> A.height<span style=\"color:#f92672\">&gt;<\/span>B.height;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>h);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>e[i].height,<span style=\"color:#f92672\">&amp;<\/span>e[i].weight,<span style=\"color:#f92672\">&amp;<\/span>e[i].strength);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> sort(e<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,e<span style=\"color:#f92672\">+<\/span>n<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,cmp);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> sum<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> t[i]<span style=\"color:#f92672\">=<\/span>t[i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">+<\/span>e[i].weight;\n<\/span><\/span><span style=\"display:flex;\"><span> sum<span style=\"color:#f92672\">+=<\/span>e[i].height;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(sum<span style=\"color:#f92672\">&gt;=<\/span>h){\n<\/span><\/span><span style=\"display:flex;\"><span> cnt<span style=\"color:#f92672\">=<\/span>i;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">break<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>cnt;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> ans<span style=\"color:#f92672\">=<\/span>min(ans,e[i].strength<span style=\"color:#f92672\">-<\/span>(t[cnt]<span style=\"color:#f92672\">-<\/span>t[i]));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>cnt<span style=\"color:#f92672\">||<\/span>ans<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#ae81ff\">0<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;Mark is too tall<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,ans);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>\u90a3\u4e48\u95ee\u9898\u51fa\u73b0\u5728\u54ea\u5462\uff1f\u6ce8\u610f\u5230\u5bf9\u4e8e\u8fd9\u9053\u9898\u8fd9\u4e2a\u8d2a\u5fc3\u7b56\u7565\u662f\u4e0d\u5168\u9762\u7684\uff0c\u6709\u7684\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u5728\u6392\u5e8f\u540e\u7684\u5976\u725b\u4e2d\u95f4\u79fb\u9664\u4e00\u4e9b\u6ca1\u6709\u90a3\u4e48\u4f18\u79c0\u7684\uff0c\u800c\u4e14\u6ce8\u610f\u5230 $n$ \u7684\u8303\u56f4\u975e\u5e38\u5c0f\uff0c\u90a3\u4e48\u6211\u4eec\u4fbf\u53ef\u4ee5\u4f7f\u7528\u72b6\u6001\u538b\u7f29\u548c\u641c\u7d22\u4e24\u79cd\u65b9\u5f0f\u679a\u4e3e\u4f7f\u7528\u54ea\u4e9b\u5976\u725b\uff0c\u8fd9\u6837\u5c31\u53d8\u6210\u4e86\u4e00\u4e2a\u5b8c\u7f8e\u7684\u8d2a\u5fc3\u7b56\u7565\u3002<\/p>\n<p>\u800c\u5bf9\u4e8e\u6392\u5e8f\u65b9\u5f0f\u6765\u8bf4\uff0c\u6211\u4eec\u6ce8\u610f\u5230\u53ea\u8003\u8651\u4e24\u4e2a\u5976\u725b\u7684\u8bdd\uff0c\u4e24\u4e2a\u76f8\u90bb\u7684\u5976\u725b\u4f4d\u7f6e\u7684\u4ea4\u6362\u662f\u5bf9\u4e8e\u5176\u4ed6\u5976\u725b\u6765\u8bf4\u6ca1\u6709\u4efb\u4f55\u5f71\u54cd\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u6309\u7167\u4e24\u4e2a\u5976\u725b\u7684\u4f53\u91cd\u548c\u627f\u53d7\u80fd\u529b\u7684\u5dee\u503c\u8fdb\u884c\u6392\u5e8f\u5c31\u597d\u4e86\u3002<\/p>\n<p>\u590d\u6742\u5ea6\uff1a$\\mathrm{O}(2^nn)$\u3002<\/p>\n<p>\u8fd9\u91cc\u7ed9\u51fa\u6211\u7684\u641c\u7d22\u4ee3\u7801\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">25<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,h,ans<span style=\"color:#f92672\">=-<\/span>INT_MAX,a[N],t[N];\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Cow<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> height;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> weight;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> strength;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[N],s[N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#a6e22e\">cmp<\/span>(Cow A,Cow B){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(B.strength<span style=\"color:#f92672\">-<\/span>A.weight<span style=\"color:#f92672\">!=<\/span>A.strength<span style=\"color:#f92672\">-<\/span>B.weight){<span style=\"color:#75715e\">\/\/\u8d2a\u5fc3\u7b56\u7565\u6392\u5e8f\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> A.strength<span style=\"color:#f92672\">-<\/span>B.weight<span style=\"color:#f92672\">&gt;<\/span>B.strength<span style=\"color:#f92672\">-<\/span>A.weight;\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> A.height<span style=\"color:#f92672\">&gt;<\/span>B.height;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">cal<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> temp<span style=\"color:#f92672\">=<\/span>INT_MAX;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> cnt<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> t[<span style=\"color:#ae81ff\">0<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[i]){\n<\/span><\/span><span style=\"display:flex;\"><span> s[<span style=\"color:#f92672\">++<\/span>cnt]<span style=\"color:#f92672\">=<\/span>e[i];<span style=\"color:#75715e\">\/\/\u63d0\u53d6\u51fa\u9009\u4e2d\u7684\u5976\u725b\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> sort(s<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,s<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">+<\/span>cnt,cmp);<span style=\"color:#75715e\">\/\/\u6392\u5e8f\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> sum<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>cnt;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> sum<span style=\"color:#f92672\">+=<\/span>s[i].height;\n<\/span><\/span><span style=\"display:flex;\"><span> t[i]<span style=\"color:#f92672\">=<\/span>t[i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">+<\/span>s[i].weight;<span style=\"color:#75715e\">\/\/\u524d\u7f00\u548c\u8282\u7701\u590d\u6742\u5ea6\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(sum<span style=\"color:#f92672\">&lt;<\/span>h){<span style=\"color:#75715e\">\/\/\u7279\u5224\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#f92672\">-<\/span>INT_MAX;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>cnt;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> temp<span style=\"color:#f92672\">=<\/span>min(temp,s[i].strength<span style=\"color:#f92672\">-<\/span>(t[cnt]<span style=\"color:#f92672\">-<\/span>t[i]));<span style=\"color:#75715e\">\/\/\u8bb0\u5f55\u7b54\u6848\uff0c\u8fd9\u79cd\u60c5\u51b5\u7684\u7b54\u6848\u4fbf\u662f\u5bf9\u4e8e\u6bcf\u4e00\u5934\u5976\u725b\u7684\u5269\u4f59\u627f\u53d7\u91cd\u91cf\u53d6\u6700\u5c0f\u503c\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> temp;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">DFS<\/span>(<span style=\"color:#66d9ef\">int<\/span> dep,<span style=\"color:#66d9ef\">int<\/span> now){\n<\/span><\/span><span style=\"display:flex;\"><span> a[dep]<span style=\"color:#f92672\">=<\/span>now;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dep<span style=\"color:#f92672\">==<\/span>n){\n<\/span><\/span><span style=\"display:flex;\"><span> ans<span style=\"color:#f92672\">=<\/span>max(ans,cal());\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(dep<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(dep<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>h);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>e[i].height,<span style=\"color:#f92672\">&amp;<\/span>e[i].weight,<span style=\"color:#f92672\">&amp;<\/span>e[i].strength);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(<span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">1<\/span>);<span style=\"color:#75715e\">\/\/\u641c\u7d22\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> DFS(<span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(ans<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#ae81ff\">0<\/span>){<span style=\"color:#75715e\">\/\/\u5c0f\u4e8e0\u8bf4\u660e\u6839\u672c\u642d\u4e0d\u4e86 \n<\/span><\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;Mark is too tall<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,ans);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P2530 [SHOI2001] \u5316\u5de5\u5382\u88c5\u7bb1\u5458 \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p2530\/","pubDate":"Fri, 30 Jun 2023 07:56:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p2530\/","description":"<p>\u9996\u5148\u6211\u7b2c\u4e00\u773c\u770b\u5230\u8fd9\u9053\u9898\u65f6\u4ee5\u4e3a\u8fd9\u662f\u4e00\u9053\u8d2a\u5fc3\uff0c\u8d2a\u5fc3\u7b56\u7565\u662f\u5bf9\u4e8e\u6bcf\u4e00\u6b21\u624b\u91cc\u7684 $10$ \u4e2a\u8d27\u7269\u90fd\u4f18\u5148\u653e\u4e0b\u4e2a\u6570\u6700\u591a\u7684\u3002\u5f53\u7136\u8fd9\u540e\u6765\u60f3\u4e00\u60f3\u4fbf\u662f\u9519\u8bef\u7684\uff0c\u56e0\u4e3a\u5982\u679c\u5047\u5982\u624b\u91cc\u6709 $6$ \u4e2a $A$\uff0c\u4f46\u662f\u624b\u91cc\u6709 $4$ \u4e2a $B$\uff0c\u800c\u4e14 $6$ \u4e2a\u662f\u4e00\u4e2a $A$\uff0c$5$ \u4e2a $C$\uff0c\u90a3\u4e48\u8fd9\u4e2a\u8d2a\u5fc3\u7b56\u7565\u5f88\u660e\u663e\u5c31\u4e0d\u6ee1\u8db3\u6700\u4f18\u89e3\u4e86\u3002<\/p>\n<p>\u6240\u4ee5\u8003\u8651 $dp$\uff0c\u4e00\u5f00\u59cb\u6211\u662f\u60f3\u5f00\u56db\u7ef4\u6570\u7ec4\uff0c\u4e00\u7ef4\u7528\u6765\u8bb0\u5f55 $dp$ \u5230\u7b2c\u51e0\u4e2a\u4e86\uff0c\u53e6\u5916\u4e09\u7ef4\u7528\u6765\u8bb0\u5f55\u6240\u6709\u6ca1\u62ff\u51fa\u53bb\u7684 $A,B,C$ \u7684\u4e2a\u6570\uff0c\u4f46\u662f\u540e\u6765\u53d1\u73b0\u8fd9\u6837\u9700\u8981\u7ef4\u62a4\u7684\u4e1c\u897f\u592a\u591a\uff0c\u90a3\u4e48\u7ecf\u8fc7\u89c2\u5bdf\u8303\u56f4\u53d1\u73b0\u6211\u7684\u6570\u7ec4\u8bbe\u8ba1\u5e94\u8be5\u662f\u6ca1\u6709\u95ee\u9898\u7684\uff0c\u90a3\u4e48\u5c31\u6539\u53d8\u4e00\u4e0b\u72b6\u6001\u8bbe\u8ba1\uff0c\u5bf9\u4e8e\u8f6c\u79fb\u6765\u8bf4\uff0c\u6700\u4f18\u79c0\u7684\u4fbf\u662f\u628a\u540e\u9762\u4e09\u4e2a\u7ef4\u5ea6\u8f6c\u6362\u6210\u73b0\u5728\u624b\u91cc\u6240\u6301\u6709\u7684\u4e09\u4e2a\u7269\u54c1\u7684\u4e2a\u6570\uff0c\u8fd9\u6837\u6570\u7ec4\u63d0\u4f9b\u7684\u4fe1\u606f\u5c31\u8db3\u591f\u7ef4\u6301\u6211\u4eec\u7684 $dp$ \u8f6c\u79fb\u4e86\uff0c\u5982\u4f55\u8f6c\u79fb\u5199\u5728\u4ee3\u7801\u6ce8\u91ca\u91cc\u4e86\u3002<\/p>\n<p>\u590d\u6742\u5ea6\uff1a$\\mathrm{O}(1000n)=O(n^2\\sqrt[]{n})$<\/p>\n<h1 id=\"code\">code:\n<\/h1><div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">105<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,a[N],dp[N][<span style=\"color:#ae81ff\">11<\/span>][<span style=\"color:#ae81ff\">11<\/span>][<span style=\"color:#ae81ff\">11<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span>string s;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u4f7f\u7528\u5b57\u7b26\u4e32\u9632\u6b62\u7384\u5b66\u51fa\u9505\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> cin<span style=\"color:#f92672\">&gt;&gt;<\/span>s;\n<\/span><\/span><span style=\"display:flex;\"><span> a[i]<span style=\"color:#f92672\">=<\/span>s[<span style=\"color:#ae81ff\">0<\/span>]<span style=\"color:#f92672\">-<\/span><span style=\"color:#e6db74\">&#39;A&#39;<\/span><span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> memset(dp,<span style=\"color:#ae81ff\">0x3f<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> dp);<span style=\"color:#75715e\">\/\/\u56e0\u4e3a\u8981\u53d6\u6700\u5c0f\u503c\u6240\u4ee5dp\u6570\u7ec4\u521d\u59cb\u5316\u6781\u5927\u503c\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> dp[<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;<span style=\"color:#75715e\">\/\/dp\u8d77\u70b9\u8bbe\u7f6e\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> T<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;T<span style=\"color:#f92672\">&lt;=<\/span>n;T<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span><span style=\"color:#ae81ff\">10<\/span>;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span><span style=\"color:#ae81ff\">10<\/span>;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> k<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;k<span style=\"color:#f92672\">&lt;=<\/span><span style=\"color:#ae81ff\">10<\/span>;k<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(i<span style=\"color:#f92672\">+<\/span>j<span style=\"color:#f92672\">+<\/span>k<span style=\"color:#f92672\">&gt;<\/span><span style=\"color:#ae81ff\">10<\/span>) <span style=\"color:#66d9ef\">continue<\/span>;<span style=\"color:#75715e\">\/\/\u5982\u679c\u4e09\u4e2a\u76f8\u52a0\u8d85\u8fc710\u7684\u8bdd\u8fd9\u4e2a\u72b6\u6001\u4e0d\u5408\u6cd5\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[T]<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>i<span style=\"color:#f92672\">!=<\/span><span style=\"color:#ae81ff\">0<\/span>){<span style=\"color:#75715e\">\/\/\u4ee5\u4e0b\u4e09\u4e2aif\u5206\u522b\u8868\u793a\u5bf9\u4e8ea[T]\u7684\u6bcf\u4e00\u79cd\u60c5\u51b5\u53ea\u62ff\u8fdb\u6765\u5374\u4e0d\u653e\u4e0b\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> dp[T][i][j][k]<span style=\"color:#f92672\">=<\/span>min(dp[T][i][j][k],dp[T<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][j][k]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[T]<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>j<span style=\"color:#f92672\">!=<\/span><span style=\"color:#ae81ff\">0<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dp[T][i][j][k]<span style=\"color:#f92672\">=<\/span>min(dp[T][i][j][k],dp[T<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][i][j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][k]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(a[T]<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">3<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>k<span style=\"color:#f92672\">!=<\/span><span style=\"color:#ae81ff\">0<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dp[T][i][j][k]<span style=\"color:#f92672\">=<\/span>min(dp[T][i][j][k],dp[T<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][i][j][k<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> dp[T][<span style=\"color:#ae81ff\">0<\/span>][j][k]<span style=\"color:#f92672\">=<\/span>min(dp[T][<span style=\"color:#ae81ff\">0<\/span>][j][k],dp[T][i][j][k]<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>);<span style=\"color:#75715e\">\/\/\u4ee5\u4e0b\u4e09\u884c\u5bf9\u5e94\u7684\u662f\u8fd9\u4e00\u6b21\u62ff\u51fa\u6bcf\u4e00\u79cd\u7684\u53ef\u80fd\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> dp[T][i][<span style=\"color:#ae81ff\">0<\/span>][k]<span style=\"color:#f92672\">=<\/span>min(dp[T][i][<span style=\"color:#ae81ff\">0<\/span>][k],dp[T][i][j][k]<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> dp[T][i][j][<span style=\"color:#ae81ff\">0<\/span>]<span style=\"color:#f92672\">=<\/span>min(dp[T][i][j][<span style=\"color:#ae81ff\">0<\/span>],dp[T][i][j][k]<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> } \n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,dp[n][<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>][<span style=\"color:#ae81ff\">0<\/span>]);<span style=\"color:#75715e\">\/\/\u56e0\u4e3a\u6700\u540e\u624b\u91cc\u4ec0\u4e48\u90fd\u4e0d\u5269\uff0c\u6240\u4ee5\u8f93\u51fa\u5168\u4e3a0\u7684\u72b6\u6001\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P4209 \u5b66\u4e60\u5c0f\u7ec4 \u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p4209\/","pubDate":"Sat, 17 Jun 2023 15:39:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p4209\/","description":"<h1 id=\"mathrmtag\u7f51\u7edc\u6d41\u8d39\u7528\u6d41\">$\\mathrm{tag}$\uff1a\u7f51\u7edc\u6d41\uff0c\u8d39\u7528\u6d41\n<\/h1><hr>\n<p>\u6211\u7b2c\u4e00\u773c\u770b\u5230\u8fd9\u9053\u9898\u7684\u5e73\u65b9\u5efa\u8fb9\u7684\u65f6\u5019\u6211\u8fd8\u4ee5\u4e3a\u9700\u8981\u4e00\u4e9b\u6570\u5b66\u65b9\u9762\u7684\u4f18\u5316\uff0c\u4f46\u662f\u540c\u673a\u623f\u5927\u4f6c\u7785\u4e86\u4e00\u773c\u8ddf\u6211\u8bf4\u66b4\u529b\u5efa\u8fb9\u80fd\u8fc7\uff0c\u6211\u5fc3\u91cc\u4e00\u7fa4\u8349\u6ce5\u9a6c\u5954\u817e\u800c\u8fc7\u3002\u3002\u3002<\/p>\n<p>\u8fd9\u9898\u7684\u57fa\u672c\u5efa\u6a21\u5176\u5b9e\u5c31\u662f\u6309\u7167\u9898\u610f\u6a21\u62df\uff1a<\/p>\n<p>$1.$ \u4ece\u8d85\u7ea7\u6e90\u70b9\u5411\u6bcf\u4e00\u4f4d\u540c\u5b66\u8fde\u4e00\u6761\u6d41\u91cf\u4e3a $\\mathrm{k}$\uff0c\u8d39\u7528\u4e3a $0$ \u7684\u8fb9\u3002<\/p>\n<p>$2.$ \u4ece\u6bcf\u4e2a\u540c\u5b66\u5411\u613f\u610f\u53c2\u52a0\u7684\u793e\u56e2\u8fde\u4e00\u6761\u5bb9\u91cf\u4e3a $1$\uff0c\u8d39\u7528\u4e3a\u624b\u7eed\u8d39\u7684\u76f8\u53cd\u6570\uff0c\u56e0\u4e3a\u4ea4\u7684\u624b\u7eed\u8d39\u7b97\u6536\u76ca\uff08<del>\u8d5a\u7ffb\u4e86<\/del>\uff09\u3002<\/p>\n<p>$3.$ \u6700\u540e\u4fbf\u662f\u521a\u624d\u8bf4\u7684\u66b4\u529b\u5efa\u8fb9\uff0c\u6839\u636e\u516c\u5f0f\u4ece\u6bcf\u4e2a\u793e\u56e2\u5411\u6c47\u70b9\u8fde $n$ \u6761\u8fb9\uff0c\u6bcf\u4e00\u6761\u8fb9\u7684\u5bb9\u91cf\u4e3a $1$,\u8d39\u7528\u4e3a\u2014\u2014$C_i \\times (2 \\times Num-1)$\uff0c$Num$ \u8868\u793a\u7b2c\u51e0\u6761\u8fb9\u3002<\/p>\n<p>\u4f46\u662f\u6211\u4eec\u6ce8\u610f\u5230\u9898\u76ee\u8981\u6c42\u7684\u6700\u5927\u6d41\u91cf\u662f\u53c2\u52a0\u7684\u4eba\u6570\u5c3d\u91cf\u591a\u800c\u4e0d\u662f\u5b66\u4e60\u5c0f\u7ec4\u7684\u4eba\u6570\u4e4b\u548c\uff0c\u90a3\u4e48\u6211\u4eec\u8fd9\u91cc\u7528\u4e00\u4e2a\u8d2a\u5fc3\u7684\u601d\u60f3\uff0c\u518d\u4ece\u6bcf\u4e2a\u540c\u5b66\u5411\u6c47\u70b9\u8fde\u4e00\u6761\u5bb9\u91cf\u4e3a $k-1$\uff0c\u8d39\u7528\u4e3a $0$ \u7684\u8fb9\uff0c\u56e0\u4e3a\u6211\u4eec\u53ea\u8981\u4fdd\u8bc1\u8fd9\u4e2a\u540c\u5b66\u53c2\u52a0\u4e86\u4efb\u610f\u4e00\u4e2a\u5b66\u4e60\u5c0f\u7ec4\u5c31\u591f\u4e86\u3002<\/p>\n<p>\u5982\u679c\u8d22\u52a1\u5904\u80fd\u8d5a\u5230\u94b1\u5c31\u8ba9\u5b66\u751f\u53bb\u53c2\u52a0\uff0c\u8d5a\u4e0d\u5230\u76f4\u63a5\u8ba9\u8fd9\u4e2a\u5b66\u751f\u8d70\u8d39\u7528\u4e3a $0$ \u7684\u8fb9\u5c31\u597d\u4e86\uff08<del>\u771f\u9ed1\u554a<\/del>\uff09\u3002<\/p>\n<p>\u590d\u6742\u5ea6\u5206\u6790\uff1aDinic \u590d\u6742\u5ea6\uff0c\u662f\u80af\u5b9a\u80fd\u8fc7\u7684\u5566\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> inf<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e9<\/span><span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">7<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">10005<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,m,sum,a[N],b[N],head[N],cnt<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>,s,t,ans;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Edge<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> next;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> wide;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> val;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[N<span style=\"color:#f92672\">*<\/span>N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">adding<\/span>(<span style=\"color:#66d9ef\">int<\/span> u,<span style=\"color:#66d9ef\">int<\/span> v,<span style=\"color:#66d9ef\">int<\/span> w,<span style=\"color:#66d9ef\">int<\/span> val){\n<\/span><\/span><span style=\"display:flex;\"><span> e[<span style=\"color:#f92672\">++<\/span>cnt].to<span style=\"color:#f92672\">=<\/span>v;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].val<span style=\"color:#f92672\">=<\/span>val;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].wide<span style=\"color:#f92672\">=<\/span>w;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].next<span style=\"color:#f92672\">=<\/span>head[u];\n<\/span><\/span><span style=\"display:flex;\"><span> head[u]<span style=\"color:#f92672\">=<\/span>cnt;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> dis[N],vis[N];\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> now[N];\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#a6e22e\">SPFA<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>t;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dis[i]<span style=\"color:#f92672\">=<\/span>inf;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> dis[s]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> queue<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(s);\n<\/span><\/span><span style=\"display:flex;\"><span> vis[s]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> now[s]<span style=\"color:#f92672\">=<\/span>head[s];\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(q.size()){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> x<span style=\"color:#f92672\">=<\/span>q.front();\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> vis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(e[i].wide<span style=\"color:#f92672\">&amp;&amp;<\/span>dis[v]<span style=\"color:#f92672\">&gt;<\/span>dis[x]<span style=\"color:#f92672\">+<\/span>e[i].val){\n<\/span><\/span><span style=\"display:flex;\"><span> now[v]<span style=\"color:#f92672\">=<\/span>head[v];\n<\/span><\/span><span style=\"display:flex;\"><span> dis[v]<span style=\"color:#f92672\">=<\/span>dis[x]<span style=\"color:#f92672\">+<\/span>e[i].val;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>vis[v]){\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(v);\n<\/span><\/span><span style=\"display:flex;\"><span> vis[v]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> dis[t]<span style=\"color:#f92672\">!=<\/span>inf;\n<\/span><\/span><span style=\"display:flex;\"><span>} \n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">DFS<\/span>(<span style=\"color:#66d9ef\">int<\/span> x,<span style=\"color:#66d9ef\">int<\/span> sum){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(x<span style=\"color:#f92672\">==<\/span>t) <span style=\"color:#66d9ef\">return<\/span> ans<span style=\"color:#f92672\">+=<\/span>dis[t]<span style=\"color:#f92672\">*<\/span>sum,sum;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> k,res<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> vis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>now[x];i<span style=\"color:#f92672\">&amp;<\/span><span style=\"color:#960050;background-color:#1e0010\">\u2211<\/span>i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> now[x]<span style=\"color:#f92672\">=<\/span>i;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(e[i].wide<span style=\"color:#f92672\">&amp;&amp;<\/span>(dis[v]<span style=\"color:#f92672\">==<\/span>dis[x]<span style=\"color:#f92672\">+<\/span>e[i].val)<span style=\"color:#f92672\">&amp;&amp;!<\/span>vis[v]){\n<\/span><\/span><span style=\"display:flex;\"><span> k<span style=\"color:#f92672\">=<\/span>DFS(v,min(sum,e[i].wide));\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(k<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">0<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> dis[v]<span style=\"color:#f92672\">=<\/span>inf;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> e[i].wide<span style=\"color:#f92672\">-=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> e[i<span style=\"color:#f92672\">^<\/span><span style=\"color:#ae81ff\">1<\/span>].wide<span style=\"color:#f92672\">+=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> sum<span style=\"color:#f92672\">-=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> res<span style=\"color:#f92672\">+=<\/span>k;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> vis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> res;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">Dinic<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(SPFA()){\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(s,inf);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>m,<span style=\"color:#f92672\">&amp;<\/span>sum);\n<\/span><\/span><span style=\"display:flex;\"><span> t<span style=\"color:#f92672\">=<\/span>n<span style=\"color:#f92672\">+<\/span>m<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>a[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>b[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u7b2c\u4e00\u6b65\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> adding(s,i,sum,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(i,s,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">char<\/span> c;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u7b2c\u4e8c\u6b65\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>m;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> c<span style=\"color:#f92672\">=<\/span>getchar();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(c<span style=\"color:#f92672\">!=<\/span><span style=\"color:#e6db74\">&#39;1&#39;<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>c<span style=\"color:#f92672\">!=<\/span><span style=\"color:#e6db74\">&#39;0&#39;<\/span>){<span style=\"color:#75715e\">\/\/\u9632\u6b62\u5b57\u7b26\u4e32\u51fa\u9505\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> j<span style=\"color:#f92672\">--<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(c<span style=\"color:#f92672\">==<\/span><span style=\"color:#e6db74\">&#39;1&#39;<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(i,j<span style=\"color:#f92672\">+<\/span>n,<span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#f92672\">-<\/span>b[j]);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(j<span style=\"color:#f92672\">+<\/span>n,i,<span style=\"color:#ae81ff\">0<\/span>,b[j]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u66b4\u529b\u7b2c\u4e09\u6b65\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>n;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(i<span style=\"color:#f92672\">+<\/span>n,t,<span style=\"color:#ae81ff\">1<\/span>,a[i]<span style=\"color:#f92672\">*<\/span>(<span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span> adding(t,i<span style=\"color:#f92672\">+<\/span>n,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#f92672\">-<\/span>a[i]<span style=\"color:#f92672\">*<\/span>(<span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">*<\/span>j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u8d2a\u5fc3\u4f18\u5316\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> adding(i,t,sum<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> adding(t,i,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#ae81ff\">0<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> Dinic();\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,ans);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"SP688 SAM - Toy Cars\u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/sp688\/","pubDate":"Mon, 12 Jun 2023 14:10:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/sp688\/","description":"<h1 id=\"\u53cc\u500d\u7ecf\u9a8cp3419\">\u53cc\u500d\u7ecf\u9a8c<a class=\"link\" href=\"https:\/\/www.luogu.com.cn\/problem\/P3419\" target=\"_blank\" rel=\"noopener\"\n >P3419<\/a>\n<\/h1><p>\u5176\u5b9e\u6211\u7b2c\u4e00\u773c\u770b\u5230\u8fd9\u9053\u9898\u7684\u65f6\u5019\u4ee5\u4e3a\u662f\u4e00\u9053 $\\texttt{DP}$\uff0c\u4f46\u662f\u60f3\u4e86\u60f3\u5c31\u53d1\u73b0\u8981\u8bb0\u5f55\u7684\u72b6\u6001\u5b9e\u5728\u592a\u591a\uff0c\u4e8e\u662f\u5c31\u53bb\u60f3\u8d2a\u5fc3\u3002<\/p>\n<p>\u8003\u8651\u6bcf\u6b21\u62ff\u73a9\u5177\u5bf9\u603b\u4f53\u7684\u8d21\u732e\uff0c\u56e0\u4e3a\u80fd\u540c\u65f6\u653e\u5728\u5730\u4e0a\u7684\u73a9\u5177\u4e2a\u6570\u6709\u9650\uff0c\u800c\u6211\u4eec\u53c8\u53ea\u8ba1\u7b97\u62ff\u73a9\u5177\u4e0b\u6765\u7684\u6b21\u6570\uff0c\u4e8e\u662f\u4fbf\u53ef\u5f97\u51fa\u4e00\u4e2a\u8d2a\u5fc3\u7ed3\u8bba\uff0c\u90a3\u4fbf\u662f\u5bf9\u4e8e\u628a\u73a9\u5177\u653e\u56de\u53bb\u8fd9\u4e2a\u884c\u4e3a\uff0c\u4e0b\u4e00\u6b21\u73a9\u8fd9\u4e2a\u73a9\u5177\u7684\u65f6\u95f4\u8ddd\u79bb\u73b0\u5728\u8d8a\u8fdc\u4e00\u5b9a\u8d8a\u4f18\uff0c\u56e0\u4e3a\u6211\u4eec\u4e0d\u80fd\u4e0d\u73a9\u4efb\u4f55\u4e00\u4e2a\u73a9\u5177\u3002<\/p>\n<p>\u6240\u4ee5\u6211\u4eec\u5728\u628a\u73a9\u7684\u987a\u5e8f\u8bfb\u5165\u540e\uff0c\u5012\u5e8f\u679a\u4e3e\u9884\u5904\u7406\u51fa\u8fd9\u4e2a\u73a9\u5177\u4e0b\u4e00\u6b21\u73a9\u7684\u65f6\u95f4\uff0c\u90a3\u4e48\u81f3\u4e8e\u5982\u4f55\u9009\u62e9\uff0c\u53ea\u9700\u8981\u7528\u4e00\u4e2a\u4f18\u5148\u961f\u5217\u7ef4\u62a4\u5373\u53ef\uff0c\u56e0\u4e3a\u8981\u5b58\u4e24\u7ef4\uff0c\u4e00\u4e2a\u662f\u7528\u6765\u6392\u5e8f\u7684 $\\texttt{next}$ \u6570\u7ec4\uff0c\u4e00\u4e2a\u662f\u8fd9\u4e2a\u73a9\u5177\u7684 $\\texttt{id}$\uff0c\u6240\u4ee5\u6211\u4eec\u7528\u4f18\u5148\u961f\u5217\u5b58\u4e00\u4e2a $\\texttt{pair}$ \u7c7b\u5373\u53ef\u3002<\/p>\n<p>\u590d\u6742\u5ea6\u4e3a\u8dd1\u4e0d\u6ee1\u7684 $\\mathrm{O}(nlogn)$\u3002<\/p>\n<p>\u53e6\u5916\u6e29\u99a8\u63d0\u793a\uff0c\u591a\u6d4b\u4e0d\u6e05\u7a7a\uff0c\u7206\u96f6\u4e24\u884c\u6cea\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">500005<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,k,p,a[N],nex[N],temp[N],ans,vis[N],tot;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>priority_queue<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span>,vector<span style=\"color:#f92672\">&lt;<\/span>pair<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span>,<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;&gt;&gt;<\/span>q;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\">\/\/\u4e5f\u53ef\u4ee5\u8fd9\u6837\u5199\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\">\/\/ priority_queue&lt;pair&lt;int,int&gt;&gt;q;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">init<\/span>(){<span style=\"color:#75715e\">\/\/\u9884\u5904\u7406\u51fd\u6570\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(<span style=\"color:#f92672\">!<\/span>q.empty()){\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> memset(temp,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> temp);\n<\/span><\/span><span style=\"display:flex;\"><span> memset(nex,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> nex);\n<\/span><\/span><span style=\"display:flex;\"><span> memset(vis,<span style=\"color:#ae81ff\">0<\/span>,<span style=\"color:#66d9ef\">sizeof<\/span> vis);\n<\/span><\/span><span style=\"display:flex;\"><span> ans<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> T;\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>T);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> l<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;l<span style=\"color:#f92672\">&lt;=<\/span>T;l<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>k,<span style=\"color:#f92672\">&amp;<\/span>p);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>p;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>a[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>p;i<span style=\"color:#f92672\">&gt;=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">--<\/span>){<span style=\"color:#75715e\">\/\/\u9884\u5904\u7406\u51fanex\u6570\u7ec4\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(temp[a[i]]<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">0<\/span>) nex[i]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1e6<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">else<\/span> nex[i]<span style=\"color:#f92672\">=<\/span>temp[a[i]];\n<\/span><\/span><span style=\"display:flex;\"><span> temp[a[i]]<span style=\"color:#f92672\">=<\/span>i;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>p;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>vis[a[i]]){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(q.size()<span style=\"color:#f92672\">==<\/span>k){\n<\/span><\/span><span style=\"display:flex;\"><span> vis[q.top().second]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> q.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(make_pair(nex[i],a[i]));\n<\/span><\/span><span style=\"display:flex;\"><span> ans<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> vis[a[i]]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{<span style=\"color:#75715e\">\/\/\u56e0\u4e3a\u6709\u65b0\u7684\u8fdb\u5165\u961f\u5217\u66f4\u65b0\uff0c\u800c\u4f18\u5148\u961f\u5217\u4e0d\u597d\u7ef4\u62a4\u5f39\u51fa\uff0c\u6240\u4ee5\u628a\u8303\u56f4\u5f00\u5927\u4e00\u4e2a\uff0c\u9632\u6b62\u9519\u8bef\u5f39\u51fa\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> k<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> q.push(make_pair(nex[i],a[i]));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d<\/span><span style=\"color:#ae81ff\">\\n<\/span><span style=\"color:#e6db74\">&#34;<\/span>,ans);\n<\/span><\/span><span style=\"display:flex;\"><span> init();\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P3005 [USACO10DEC]The Trough Game S\u9898\u89e3","link":"https:\/\/rechenz.github.io\/post\/p3005\/","pubDate":"Tue, 30 May 2023 13:28:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p3005\/","description":"<p>\u9996\u5148\u770b\u5230\u8fd9\u9053\u9898\u7684\u6570\u636e\u8303\u56f4\u5c31\u53ef\u4ee5\u60f3\u5230\u662f\u679a\u4e3e\u66b4\u529b\u3002<\/p>\n<p>\u800c\u5bf9\u4e8e\u679a\u4e3e\u6211\u4eec\u6709\u4e24\u79cd\u65b9\u6cd5\uff0c\u4e00\u79cd\u662f $\\texttt{DFS}$\uff0c\u800c\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4e8c\u8fdb\u5236\u6765\u8fdb\u884c\u679a\u4e3e\uff08<del>\u53cd\u6b63\u6211\u7528\u7684 $\\texttt{DFS}$<\/del>\uff09\u3002<\/p>\n<p>\u800c\u8fd9\u9898\u6709\u4e24\u79cd\u60c5\u51b5\u7684\u7ffb\u8bd1\u5e76\u6ca1\u6709\u7ed9\u51fa\uff0c\u4e00\u79cd\u662f\u65e0\u89e3\u8f93\u51fa $\\texttt{IMPOSSIBLE}$\uff0c\u53e6\u4e00\u79cd\u662f\u89e3\u6cd5\u4e0d\u552f\u4e00\u8f93\u51fa $\\texttt{NOT UNIQUE}$\u3002<\/p>\n<p>\u800c\u5bf9\u4e8e $\\texttt{IMPOSSIBLE}$ \u6211\u4eec\u53ea\u9700\u8981\u5224\u65ad $\\texttt{DFS}$ \u540e\u662f\u5426\u627e\u5230\u4e86\u4e00\u79cd\u89e3\u5c31\u597d\u4e86\u3002<\/p>\n<p>\u5bf9\u4e8e $\\texttt{NOT UNIQUE}$ \u60c5\u51b5\u6211\u4eec\u4e5f\u53ea\u9700\u8981\u5728\u5224\u65ad\u662f\u5426\u627e\u5230\u4e86\u4e0d\u552f\u4e00\u7684\u5408\u6cd5\u89e3\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<p>\u590d\u6742\u5ea6 $\\mathrm{O}(2^{n}m)$\uff0c\u4e0d\u5b8c\u5168\u4f30\u8ba1 $\\mathrm{O}(104857600)$\uff0c$\\texttt{1s}$ \u80af\u5b9a\u662f\u80fd\u8fc7\u7684\u5566\u3002<\/p>\n<h1 id=\"code\">code\n<\/h1><div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,m,t[<span style=\"color:#ae81ff\">25<\/span>],ans[<span style=\"color:#ae81ff\">25<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> flag<span style=\"color:#f92672\">=<\/span>false,judge;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Query<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> a[<span style=\"color:#ae81ff\">25<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> num;\n<\/span><\/span><span style=\"display:flex;\"><span>}q[<span style=\"color:#ae81ff\">105<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">bool<\/span> <span style=\"color:#a6e22e\">check<\/span>(){<span style=\"color:#75715e\">\/\/\u5224\u65ad\u89e3\u662f\u5426\u5408\u6cd5\u7684\u51fd\u6570\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> temp<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>n;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(q[i].a[j]<span style=\"color:#f92672\">&amp;&amp;<\/span>t[j]){\n<\/span><\/span><span style=\"display:flex;\"><span> temp<span style=\"color:#f92672\">++<\/span>;<span style=\"color:#75715e\">\/\/\u8bb0\u5f55\u641c\u5230\u7684\u7ed3\u679c\u7684\u6709\u8349\u6599\u7684\u4e2a\u6570\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(temp<span style=\"color:#f92672\">!=<\/span>q[i].num){<span style=\"color:#75715e\">\/\/\u4e0d\u7b26\u5408\u6761\u4ef6\u76f4\u63a5\u8fd4\u56de\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> false;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> ans[i]<span style=\"color:#f92672\">=<\/span>t[i];\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(flag<span style=\"color:#f92672\">==<\/span>true){<span style=\"color:#75715e\">\/\/\u662f\u5426\u6709\u8fc7\u5408\u6cd5\u89e3\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> judge<span style=\"color:#f92672\">=<\/span>true;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> true;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">DFS<\/span>(<span style=\"color:#66d9ef\">int<\/span> dep){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dep<span style=\"color:#f92672\">==<\/span>n){<span style=\"color:#75715e\">\/\/\u641c\u5b8cn\u4e2a\u5c31\u68c0\u67e5\u662f\u5426\u5408\u6cd5\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(check()){\n<\/span><\/span><span style=\"display:flex;\"><span> flag<span style=\"color:#f92672\">=<\/span>true;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> t[dep<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;<span style=\"color:#75715e\">\/\/\u679a\u4e3e\u6bcf\u4e00\u79cd\u60c5\u51b5\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> DFS(dep<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\">\/\/ if(flag) return;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> t[dep<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(dep<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\">\/\/ if(flag) return;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>n,<span style=\"color:#f92672\">&amp;<\/span>m);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>n;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">char<\/span> s;\n<\/span><\/span><span style=\"display:flex;\"><span> cin<span style=\"color:#f92672\">&gt;&gt;<\/span>s;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(s<span style=\"color:#f92672\">==<\/span><span style=\"color:#e6db74\">&#39; &#39;<\/span><span style=\"color:#f92672\">||<\/span>s<span style=\"color:#f92672\">==<\/span><span style=\"color:#e6db74\">&#39;\\n&#39;<\/span>){<span style=\"color:#75715e\">\/\/\u9632\u6b62\u7384\u5b66\u5b57\u7b26\u4e32\u51fa\u9505\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> j<span style=\"color:#f92672\">--<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">continue<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> q[i].a[j]<span style=\"color:#f92672\">=<\/span>s<span style=\"color:#f92672\">-<\/span><span style=\"color:#e6db74\">&#39;0&#39;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>q[i].num);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#75715e\">\/\/\u641c\u7d22\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> t[<span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(<span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> t[<span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> DFS(<span style=\"color:#ae81ff\">1<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>flag){\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;IMPOSSIBLE&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(judge){\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;NOT UNIQUE&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,ans[i]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"P1653 [USACO04DEC] Cow Ski Area G","link":"https:\/\/rechenz.github.io\/post\/p1653\/","pubDate":"Thu, 11 May 2023 21:01:00 +0800","guid":"https:\/\/rechenz.github.io\/post\/p1653\/","description":"<h1 id=\"\u9898\u89e3\">\u9898\u89e3\n<\/h1><p>\u4e00\u53e5\u8bdd\uff1a\u8f93\u51fa\u7f29\u70b9\u540e\u7684\u51fa\u5ea6\u4e3a $0$ \u7684\u70b9\u7684\u4e2a\u6570\u548c\u5165\u5ea6\u4e3a $0$ \u7684\u70b9\u7684\u4e2a\u6570\u7684\u6700\u5927\u503c<\/p>\n<p>\u9996\u5148\u5bf9\u8fd9\u4e2a\u77e9\u9635\u8fdb\u884c\u5efa\u6a21\uff0c\u5982\u679c\u80fd\u6ed1\u5230\u5c31\u5efa\u4e00\u6761\u5355\u5411\u8fb9\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>m;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(i<span style=\"color:#f92672\">&gt;<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>a[i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][j]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>,j));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(i<span style=\"color:#f92672\">&lt;<\/span>n<span style=\"color:#f92672\">&amp;&amp;<\/span>a[i<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>][j]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,j));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(j<span style=\"color:#f92672\">&gt;<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>a[i][j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i,j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(j<span style=\"color:#f92672\">&lt;<\/span>m<span style=\"color:#f92672\">&amp;&amp;<\/span>a[i][j<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i,j<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><\/code><\/pre><\/div><p>\u7136\u540e\u4f7f\u7528 Tarjan \u8fdb\u884c\u7f29\u70b9\uff0c\u6700\u540e\u8bb0\u5f55\u7f29\u70b9\u540e\u7684\u5165\u5ea6\u548c\u51fa\u5ea6\u5c31\u53ef\u4ee5\u4e86\uff0c\u7b54\u6848\u5c31\u662f\u51fa\u5ea6\u4e3a $0$ \u7684\u5f3a\u8fde\u901a\u5206\u91cf\u7684\u4e2a\u6570\u548c\u5165\u5ea6\u4e3a $0$ \u7684\u5f3a\u8fde\u901a\u5206\u91cf\u7684\u4e2a\u6570\u53d6 $\\max$\uff0c\u6700\u540e\u4e0d\u8981\u5fd8\u4e86\u7279\u5224\u4e00\u4e0b\u5982\u679c\u53ea\u6709\u4e00\u4e2a\u5f3a\u8fde\u901a\u5206\u91cf\u7684\u8bdd\u5c31\u4e0d\u9700\u8981\u5efa\u7acb\u4efb\u4f55\u4e00\u9053\u7f06\u8f66\u3002<\/p>\n<h2 id=\"code\">code\n<\/h2><div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"><code class=\"language-cpp\" data-lang=\"cpp\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#include&lt;bits\/stdc++.h&gt;\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">using<\/span> <span style=\"color:#66d9ef\">namespace<\/span> std;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">const<\/span> <span style=\"color:#66d9ef\">int<\/span> N<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">250005<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> n,m,head[N],cnt,a[<span style=\"color:#ae81ff\">505<\/span>][<span style=\"color:#ae81ff\">505<\/span>];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">struct<\/span> <span style=\"color:#a6e22e\">Edge<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> next;\n<\/span><\/span><span style=\"display:flex;\"><span>}e[<span style=\"color:#ae81ff\">4<\/span><span style=\"color:#f92672\">*<\/span>N];\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">adding<\/span>(<span style=\"color:#66d9ef\">int<\/span> u,<span style=\"color:#66d9ef\">int<\/span> v){\n<\/span><\/span><span style=\"display:flex;\"><span> e[<span style=\"color:#f92672\">++<\/span>cnt].to<span style=\"color:#f92672\">=<\/span>v;\n<\/span><\/span><span style=\"display:flex;\"><span> e[cnt].next<span style=\"color:#f92672\">=<\/span>head[u];\n<\/span><\/span><span style=\"display:flex;\"><span> head[u]<span style=\"color:#f92672\">=<\/span>cnt;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">cal<\/span>(<span style=\"color:#66d9ef\">int<\/span> i,<span style=\"color:#66d9ef\">int<\/span> j){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> (i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>)<span style=\"color:#f92672\">*<\/span>m<span style=\"color:#f92672\">+<\/span>j;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> dfn[N],low[N],id,vis[N],is[N],tot;\n<\/span><\/span><span style=\"display:flex;\"><span>stack<span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">&gt;<\/span> s;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">Tarjan<\/span>(<span style=\"color:#66d9ef\">int<\/span> x){<span style=\"color:#75715e\">\/\/\u7f29\u70b9\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> dfn[x]<span style=\"color:#f92672\">=<\/span>low[x]<span style=\"color:#f92672\">=++<\/span>id;\n<\/span><\/span><span style=\"display:flex;\"><span> s.push(x);\n<\/span><\/span><span style=\"display:flex;\"><span> vis[x]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[x];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>dfn[v]){\n<\/span><\/span><span style=\"display:flex;\"><span> Tarjan(v);\n<\/span><\/span><span style=\"display:flex;\"><span> low[x]<span style=\"color:#f92672\">=<\/span>min(low[v],low[x]);\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span> <span style=\"color:#66d9ef\">if<\/span>(vis[v]){\n<\/span><\/span><span style=\"display:flex;\"><span> low[x]<span style=\"color:#f92672\">=<\/span>min(low[x],dfn[v]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(dfn[x]<span style=\"color:#f92672\">==<\/span>low[x]){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">++<\/span>tot;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">while<\/span>(s.top()<span style=\"color:#f92672\">!=<\/span>x){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> temp<span style=\"color:#f92672\">=<\/span>s.top();\n<\/span><\/span><span style=\"display:flex;\"><span> s.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> is[temp]<span style=\"color:#f92672\">=<\/span>tot;\n<\/span><\/span><span style=\"display:flex;\"><span> vis[temp]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> temp<span style=\"color:#f92672\">=<\/span>s.top();\n<\/span><\/span><span style=\"display:flex;\"><span> s.pop();\n<\/span><\/span><span style=\"display:flex;\"><span> is[temp]<span style=\"color:#f92672\">=<\/span>tot;\n<\/span><\/span><span style=\"display:flex;\"><span> vis[temp]<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> in[N],out[N],tt1,tt2;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">int<\/span> <span style=\"color:#a6e22e\">main<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>m,<span style=\"color:#f92672\">&amp;<\/span>n);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>m;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> scanf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,<span style=\"color:#f92672\">&amp;<\/span>a[i][j]);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n;i<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u5efa\u8fb9\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> j<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;j<span style=\"color:#f92672\">&lt;=<\/span>m;j<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(i<span style=\"color:#f92672\">&gt;<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>a[i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>][j]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>,j));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(i<span style=\"color:#f92672\">&lt;<\/span>n<span style=\"color:#f92672\">&amp;&amp;<\/span>a[i<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>][j]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>,j));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(j<span style=\"color:#f92672\">&gt;<\/span><span style=\"color:#ae81ff\">1<\/span><span style=\"color:#f92672\">&amp;&amp;<\/span>a[i][j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i,j<span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">1<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(j<span style=\"color:#f92672\">&lt;<\/span>m<span style=\"color:#f92672\">&amp;&amp;<\/span>a[i][j<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>]<span style=\"color:#f92672\">&lt;=<\/span>a[i][j]){\n<\/span><\/span><span style=\"display:flex;\"><span> adding(cal(i,j),cal(i,j<span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">1<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;i<span style=\"color:#f92672\">&lt;=<\/span>n<span style=\"color:#f92672\">*<\/span>m;i<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>dfn[i]) Tarjan(i);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> k<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;k<span style=\"color:#f92672\">&lt;=<\/span>n<span style=\"color:#f92672\">*<\/span>m;k<span style=\"color:#f92672\">++<\/span>){<span style=\"color:#75715e\">\/\/\u8bb0\u5f55\u5165\u5ea6\u548c\u51fa\u5ea6\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> i<span style=\"color:#f92672\">=<\/span>head[k];i;i<span style=\"color:#f92672\">=<\/span>e[i].next){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">int<\/span> v<span style=\"color:#f92672\">=<\/span>e[i].to;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(is[v]<span style=\"color:#f92672\">!=<\/span>is[k]){\n<\/span><\/span><span style=\"display:flex;\"><span> in[is[v]]<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> out[is[k]]<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#66d9ef\">int<\/span> k<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>;k<span style=\"color:#f92672\">&lt;=<\/span>tot;k<span style=\"color:#f92672\">++<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>in[k]) tt1<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(<span style=\"color:#f92672\">!<\/span>out[k]) tt2<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span>(tot<span style=\"color:#f92672\">==<\/span><span style=\"color:#ae81ff\">1<\/span>){<span style=\"color:#75715e\">\/\/\u8f93\u51fa\u7b54\u6848\n<\/span><\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;0&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }<span style=\"color:#66d9ef\">else<\/span>{\n<\/span><\/span><span style=\"display:flex;\"><span> printf(<span style=\"color:#e6db74\">&#34;%d&#34;<\/span>,max(tt1,tt2));\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#ae81ff\">0<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"}]}}