﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-夜幻梦回-文章分类-private</title><link>http://www.cppblog.com/Ylemzy/category/11773.html</link><description>足迹的足迹</description><language>zh-cn</language><lastBuildDate>Thu, 05 May 2011 06:47:13 GMT</lastBuildDate><pubDate>Thu, 05 May 2011 06:47:13 GMT</pubDate><ttl>60</ttl><item><title>图论</title><link>http://www.cppblog.com/Ylemzy/articles/143031.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Wed, 30 Mar 2011 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/143031.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/143031.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/143031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/143031.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/143031.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p><strong> 最短路问题<br></strong> 此类问题类型不多，变形较少</p>
<p>POJ 2449 Remmarguts' Date(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2449">http://acm.pku.edu.cn/JudgeOnline/problem?id=2449</a><br>题意：经典问题：K短路<br>解法：dijkstra+A*(rec)，方法很多<br>相关：<a href="http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144">http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144</a><br>该题亦放在搜索推荐题中<br><br>POJ 3013 - Big Christmas Tree(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3013">http://acm.pku.edu.cn/JudgeOnline/problem?id=3013</a><br>题意：最简单最短路，但此题要过，需要较好的程序速度和，还要注意精度<br>解法：Dijkstra</p>
<p>POJ 3463 - Sightseeing(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3463">http://acm.pku.edu.cn/JudgeOnline/problem?id=3463</a><br>题意：最短路和比最短路大1的路的数量<br>解法：需要真正理解dijkstra</p>
<p>POJ 3613 - Cow Relays(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3613">http://acm.pku.edu.cn/JudgeOnline/problem?id=3613</a><br>题意：求经过N条边的最短路<br>解法：floyd + 倍增，贪心</p>
<p>POJ 3621 - Sightseeing Cows(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3621">http://acm.pku.edu.cn/JudgeOnline/problem?id=3621</a><br>题意：求一个环路，欢乐值 / 总路径最大<br>解法：参数搜索 + 最短路(ms 原始的bellman tle, 用spfa才过)<br><br>POJ 3635 - full tank?(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3635">http://acm.pku.edu.cn/JudgeOnline/problem?id=3635</a><br>题意：最短路变形<br>解法：广搜<br>相关：<a href="http://hi.baidu.com/hnu_reason/blog/item/086e3dccfc8cb21600e9286b.html">http://hi.baidu.com/hnu_reason/blog/item/086e3dccfc8cb21600e9286b.html</a></p>
<p><br><strong> 生成树问题<br></strong> 基本的生成树就不放上来了</p>
<p>POJ 1639 - Picnic Planning(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1639">http://acm.pku.edu.cn/JudgeOnline/problem?id=1639</a><br>题意：顶点度数有限制的最小生成树<br>解法：贪心 + prim/kruskal</p>
<p>POJ 1679 - The Unique MST(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1679">http://acm.pku.edu.cn/JudgeOnline/problem?id=1679</a><br>题意：判断MST是否唯一<br>解法：prim就行，不过还是易错的题</p>
<p>POJ 2728 - Desert King(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2728">http://acm.pku.edu.cn/JudgeOnline/problem?id=2728</a><br>题意：所谓最优比率生成树<br>解法：参数搜索 + prim</p>
<p>POJ 3164 - Command Network(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3164">http://acm.pku.edu.cn/JudgeOnline/problem?id=3164</a><br>题意：最小树形图<br>解法：刘朱算法，这个考到的可能性比较小吧？</p>
<p>POJ 3522 - Slim Span(基础)<a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3522"><br>http://acm.pku.edu.cn/JudgeOnline/problem?id=3522</a><br>题意：求一颗生成树，让最大边最小边差值最小<br>解法：kruskal活用</p>
<p><strong> 连通性，度数，拓扑问题<br></strong> 此类问题主要牵扯到DFS，缩点等技巧</p>
<p>POJ 1236 - Network of Schools(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1236">http://acm.pku.edu.cn/JudgeOnline/problem?id=1236</a><br>题意：问添加多少边可成为完全连通图<br>解法：缩点，看度数</p>
<p>POJ 1659 - Frogs' Neighborhood(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1659">http://acm.pku.edu.cn/JudgeOnline/problem?id=1659</a><br>题意：根据度序列构造图<br>解法：贪心，详细证明参见havel定理</p>
<p>POJ 2553 - The Bottom of a Graph(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2553">http://acm.pku.edu.cn/JudgeOnline/problem?id=2553</a><br>POJ 2186 - Popular Cows(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2186">http://acm.pku.edu.cn/JudgeOnline/problem?id=2186</a><br>题意：强连通分量缩点图出度为0的点</p>
<p>POJ 2762 - Going from u to v or from v to u?(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2762">http://acm.pku.edu.cn/JudgeOnline/problem?id=2762</a><br>题意：单向连通图判定<br>解法：缩点 + dp找最长链</p>
<p>POJ 2914 - Minimum Cut(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2914">http://acm.pku.edu.cn/JudgeOnline/problem?id=2914</a><br>题意：无向图最小割<br>解法：Stoer-Wagner算法，用网络流加枚举判定会挂<br><br>POJ 2942 - Knights of the Round Table(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2942">http://acm.pku.edu.cn/JudgeOnline/problem?id=2942</a><br>题意：求双联通分量(或称块)中是否含奇圈<br>解法：求出双连通分量后做黑白染色进行二分图图判定<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/57ada7ed104ce9d2b31cb104.html">http://hi.baidu.com/zfy0701/blog/item/57ada7ed104ce9d2b31cb104.html</a></p>
<p>POJ 3177 - Redundant Paths(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3177">http://acm.pku.edu.cn/JudgeOnline/problem?id=3177</a><br>POJ 3352 - Road Construction(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3352">http://acm.pku.edu.cn/JudgeOnline/problem?id=3352</a><br>题意：添加多少条边可成为双向连通图<br>解法：把割边分开的不同分量缩点构树，看入度<br>建议对比下1236，有向图添加多少条边变成强连通图</p>
<p>POJ 3249 - Test for Job(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3249">http://acm.pku.edu.cn/JudgeOnline/problem?id=3249</a><br>解法：bfs / dfs + dp</p>
<p>POJ 3592 - Instantaneous Transference(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3592">http://acm.pku.edu.cn/JudgeOnline/problem?id=3592</a><br>解法：缩点，最长路，少人做的水题，注意细节</p>
<p>POJ 3687 - Labeling Balls(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3687">http://acm.pku.edu.cn/JudgeOnline/problem?id=3687</a><br>解法：拓扑排序</p>
<p>POJ 3694 - Network(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3694">http://acm.pku.edu.cn/JudgeOnline/problem?id=3694</a><br>解法：双连通分量+并查集</p>
<p><strong> 2-SAT问题</strong> <br>此类问题理解合取式的含义就不难</p>
<p>POJ 2723 - Get Luffy Out(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2723">http://acm.pku.edu.cn/JudgeOnline/problem?id=2723</a><br>POJ 2749 - Building roads(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2749">http://acm.pku.edu.cn/JudgeOnline/problem?id=2749</a><br>解法：二分 + 2-SAT判定</p>
<p>POJ 3207 - Ikki's Story IV - Panda's Trick(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3207">http://acm.pku.edu.cn/JudgeOnline/problem?id=3207</a><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3648"><br></a>解法：简单的2-sat，不过其他方法更快</p>
<p>POJ 3648- Wedding(中等)<a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3648"><br>http://acm.pku.edu.cn/JudgeOnline/problem?id=3648</a><br>解法：用2-sat做会比较有意思，但是暴搜照样0ms</p>
<p>POJ 3678 - Katu Puzzle(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3678">http://acm.pku.edu.cn/JudgeOnline/problem?id=3678</a><br>解法：直接按合取式构图验证就行了</p>
<p>POJ 3683 - Priest John's Busiest Day(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3683">http://acm.pku.edu.cn/JudgeOnline/problem?id=3683</a><br>解法：n^2枚举点之间的相容性构图，求解2-SAT</p>
<p><strong> 最大流问题<br></strong> 变形很多，最小割最大流定理的理解是关键</p>
<p>POJ 1149 - PIGS(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1149">http://acm.pku.edu.cn/JudgeOnline/problem?id=1149</a><br>绝对经典的构图题</p>
<p>POJ 1273 - Drainage Ditches(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1273">http://acm.pku.edu.cn/JudgeOnline/problem?id=1273</a><br>最大流入门</p>
<p>POJ 1459 - Power Network(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1459">http://acm.pku.edu.cn/JudgeOnline/problem?id=1459</a><br>基本构图</p>
<p>POJ 1637 - Sightseeing tour(Crazy)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1637">http://acm.pku.edu.cn/JudgeOnline/problem?id=1637</a><br>题意：求混合图的欧拉迹是否存在<br>解法：无向边任意定向，构图，详建黑书P324</p>
<p>POJ 1815 - Friendship(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1815">http://acm.pku.edu.cn/JudgeOnline/problem?id=1815</a><br>题意：求最小点割<br>解法：拆点转换为边割<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/a521f230b06dea9fa9018e0e.html">http://hi.baidu.com/zfy0701/blog/item/a521f230b06dea9fa9018e0e.html</a></p>
<p>POJ 1966 - Cable TV Network(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1966">http://acm.pku.edu.cn/JudgeOnline/problem?id=1966</a><br>题意：去掉多少点让图不连通<br>解法：任定一源点，枚举汇点求点割集(转换到求边割)，求其中最小的点割<br><br>POJ 2112 - Optimal Milking(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2112">http://acm.pku.edu.cn/JudgeOnline/problem?id=2112</a><br>二分枚举，最大流</p>
<p>POJ 2391 - Ombrophobic Bovines(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2391">http://acm.pku.edu.cn/JudgeOnline/problem?id=2391</a><br>题意：floyd, 拆点，二分枚举<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/3e0006c4f73f0eaf8226acff.html">http://hi.baidu.com/zfy0701/blog/item/3e0006c4f73f0eaf8226acff.html</a></p>
<p>POJ 2396 - Budget(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2396">http://acm.pku.edu.cn/JudgeOnline/problem?id=2396</a><br>题意：有源汇的上下界可行流<br>解法：用矩阵-网络流模型构图，然后拆边<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba.html">http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba.html</a><br>，最小割模型在竞赛中的应用</p>
<p>POJ 2455 - Secret Milking Machine(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2455">http://acm.pku.edu.cn/JudgeOnline/problem?id=2455</a><br>二分枚举，一般来说需要写对边容量的更新操作而不是每次全部重新构图</p>
<p>POJ 2699 - The Maximum Number of Strong Kings(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2699">http://acm.pku.edu.cn/JudgeOnline/problem?id=2699</a><br>解法：枚举人数 + 最大流(感谢xpcnq_71大牛的建图的提示)<br><br>POJ 2987 - Firing(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2987">http://acm.pku.edu.cn/JudgeOnline/problem?id=2987</a><br>题意：最大权闭包<br>解法：先边权放大，第一问总量-最大流，第二问求最小割<br>相关：<a href="http://wywcgs.spaces.live.com/blog/cns%214D861A02A3382142%211109.entry?&amp;_c02_owner=1">http://wywcgs.spaces.live.com/blog/cns!4D861A02A3382142!1109.entry?&amp;_c02_owner=1</a><br>Profit(中等)<br><a href="http://www.vijos.cn/Problem_Show.asp?id=1352">http://www.vijos.cn/Problem_Show.asp?id=1352</a><br>最大权闭包图的特殊情况<br>ZOJ 2071 - Technology Trader 也是此类型，懒了没做<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=2071">http://acm.zju.edu.cn/show_problem.php?pid=2071</a></p>
<p>POJ 3084 - Panic Room(中等，好题)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3084">http://acm.pku.edu.cn/JudgeOnline/problem?id=3084</a><br>题意：略<br>解法：根据最小割建模</p>
<p>POJ 3155 - Hard Life(很挑战一题)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3155">http://acm.pku.edu.cn/JudgeOnline/problem?id=3155</a><br>题意：最大密度子图<br>解法：参数搜索 + 最大权闭合图，A.V.Goldberg的论文(nb解法)<br>最小割模型在信息学竞赛中的应用 一文中也有讲</p>
<p>POJ 3189 - Steady Cow Assignment(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3189">http://acm.pku.edu.cn/JudgeOnline/problem?id=3189</a><br>题意：寻找最小的区间完成匹配<br>解法：这题充分说明SAP的强大，纯暴力可过。更好的方法是在枚举区间的过程中不断删边和加边继续网络流过程</p>
<p>POJ 3204 - Ikki's Story I - Road Reconstruction(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3204">http://acm.pku.edu.cn/JudgeOnline/problem?id=3204</a><br>ZOJ 2532 - Internship(基础)<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=2532">http://acm.zju.edu.cn/show_problem.php?pid=2532</a><br>题意：确定边是否是某个割中的边<br>解法：两边dfs求割, 或暴力枚举(需要写取消某条增广路的操作(但数据弱，也许不取消也能混过))</p>
<p>POJ 3308 - Paratroopers(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3308">http://acm.pku.edu.cn/JudgeOnline/problem?id=3308</a><br>POJ 2125 - Destroying The Graph(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2125">http://acm.pku.edu.cn/JudgeOnline/problem?id=2125</a><br>题意：最小点权覆盖<br><br>POJ 3469 - Dual Core CPU(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3469">http://acm.pku.edu.cn/JudgeOnline/problem?id=3469</a><br>题意：最小割</p>
<p>POJ 3498 - March of the Penguins(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3498">http://acm.pku.edu.cn/JudgeOnline/problem?id=3498</a><br>题意：满足点容量限制的网络流<br>解法：拆点把点容量转换为边容量，枚举汇点</p>
<p>ZOJ 2587 - Unique Attack(较难)<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=2587">http://acm.zju.edu.cn/show_problem.php?pid=2587</a><br>题意：确定最小割是否是唯一的<br>解法：得理解dfs求最小割算法的本质<br><br>SPOJ 839 - Optimal Marks(难)<br><a href="http://www.spoj.pl/problems/OPTM/">http://www.spoj.pl/problems/OPTM/</a><br>题意：略<br>解法：很经典哦，见amber的集训队论文，根据标号的每一位求最小割</p>
<p>SGU 326 - Perspective(中等)<br><a href="http://acm.sgu.ru/problem.php?contest=0&amp;problem=326">http://acm.sgu.ru/problem.php?contest=0&amp;problem=326</a><br>比较经典的构图法<br><strong> <br>费用流问题</strong> <br>可以KM解的就不放在这里，另外，感觉除非很特殊的图，一般用连续增广路的算法就够了</p>
<p>POJ 2175 - Evacuation Plan(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2175">http://acm.pku.edu.cn/JudgeOnline/problem?id=2175</a><br>题意：判断是否给定解是最优解，比较阴的一题<br>解法：根据给出的计划构造流，然后消且只消一次负圈</p>
<p>POJ 3422 - Kaka's Matrix Travels(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3422">http://acm.pku.edu.cn/JudgeOnline/problem?id=3422</a><br>题意：略<br>解法：拆点</p>
<p>POJ 3680 - Intervals(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3680">http://acm.pku.edu.cn/JudgeOnline/problem?id=3680</a><br>题意：略，这题还是蛮经典<br>解法：discuss中比较详细</p>
<p>SPOJ 371 - Boxes(简单)<br><a href="http://www.spoj.pl/problems/BOXES/">http://www.spoj.pl/problems/BOXES/</a><br>题意：略<br>解法：费用流，但似乎有比网络流更好的做法</p>
<p>SGU 185 - Two shortest(中等)<br><a href="http://acm.sgu.ru/problem.php?contest=0&amp;problem=185">http://acm.sgu.ru/problem.php?contest=0&amp;problem=185</a><br>题意：求两条不想交的最短路径<br>解法：费用流，也可以最短路 + 最大流。</p>
<p><strong> 匹配问题</strong> <br>正确理解KM算法是很重要的</p>
<p>这里我还要说几句：最正确解最小权匹配的办法是用一个很大的数-当前边权值，而不是直接对边权取反(这样只能处理左右点相等的完全二分图，即K(n, n)<br><br>以上有可能还是说的有点问题，以后补充</p>
<p>POJ 1486 - Sorting Slides(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1486">http://acm.pku.edu.cn/JudgeOnline/problem?id=1486</a><br>题意：二分图的必须边<br>解法：需正真理解最大匹配算法，详见<a href="http://hi.baidu.com/kevin0602/blog/item/1d5be63b5bec9bec14cecb44.html">http://hi.baidu.com/kevin0602/blog/item/1d5be63b5bec9bec14cecb44.html</a></p>
<p>POJ 1904 - King's Quest(中等，好题)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1904">http://acm.pku.edu.cn/JudgeOnline/problem?id=1904</a><br>题意：求二分图所有可能的匹配边<br>解法：虽然最终不是用匹配算法，但需要理解匹配的思想转换成强连通分量问题。</p>
<p>POJ 2060 -Taxi Cab Scheme(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2060">http://acm.pku.edu.cn/JudgeOnline/problem?id=2060</a><br>题意：最小路径覆盖</p>
<p>POJ 2594 -Treasure Exploration(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2594">http://acm.pku.edu.cn/JudgeOnline/problem?id=2594</a><br>题意：可相交最小路径覆盖<br>解法：先传递闭包转化下<br><br>POJ 3041 - Asteroids(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3041">http://acm.pku.edu.cn/JudgeOnline/problem?id=3041</a><br>POJ 2226 - Muddy Fields(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2226">http://acm.pku.edu.cn/JudgeOnline/problem?id=2226</a><br>题意：行列的覆盖<br>解法：最小点集覆盖 = 最大匹配</p>
<p>POJ 2195 - Going Home(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2195">http://acm.pku.edu.cn/JudgeOnline/problem?id=2195</a><br>题意：最小权值匹配<br>解法：KM算法</p>
<p>POJ 2400 - Supervisor, Supervisee(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2400">http://acm.pku.edu.cn/JudgeOnline/problem?id=2400</a><br>题意：输出所有最小权匹配<br>解法：KM, 然后回溯解，汗，输入的两个矩阵居然是反过来的</p>
<p>POJ 2516 -Minimum Cost(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2516">http://acm.pku.edu.cn/JudgeOnline/problem?id=2516</a><br>题意：最小权值匹配或最小费用流<br>解法：拆点 + KM算法(只有正确的才能过)，费用流(ms错的可能也能过)</p>
<p>POJ 3686 - The Windy's(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3686">http://acm.pku.edu.cn/JudgeOnline/problem?id=3686</a><br>题意：最小权值匹配<br>解法：拆点,然后尽管用KM算法去水吧，数据其实弱得不得了 O(50 * 50 * 2500) -&gt; 16ms<br>相关：<a href="http://hi.baidu.com/kevin0602/blog/item/2829dc01d7143b087bec2c97.html">http://hi.baidu.com/kevin0602/blog/item/2829dc01d7143b087bec2c97.html</a></p>
<p>SPOJ 412 - K-path cover(较难)<br><a href="https://www.spoj.pl/problems/COVER/">https://www.spoj.pl/problems/COVER/</a><br>题意：略<br>解法：很牛叉的一道匹配<br>相关：<a href="http://hi.baidu.com/roba/blog/item/c842fdfac10d24dcb48f31d7.html">http://hi.baidu.com/roba/blog/item/c842fdfac10d24dcb48f31d7.html</a></p>
<p>SGU 206. Roads(较难)<br><a href="http://acm.sgu.ru/problem.php?contest=0&amp;problem=206">http://acm.sgu.ru/problem.php?contest=0&amp;problem=206</a><br>解法：经典题目，也可以使用spoj 412那题的优化</p>
<p><strong> NP问题</strong> <br>一般是搜索或dp解的</p>
<p>POJ 1419 - Graph Coloring(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1419">http://acm.pku.edu.cn/JudgeOnline/problem?id=1419</a><br>题意：图的着色<br>解法：搜索，可惜题目的数据真是太弱了</p>
<p>POJ 2989 - All Friends(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2989">http://acm.pku.edu.cn/JudgeOnline/problem?id=2989</a><br>题意：极大团数量<br>解法：开始狂tle, 后来找了论文：Finding All Cliques of an Undirected Graph（Coen Bron &amp; Joep Kerboscht）</p>
<p>ZOJ 1492 - Maximum Clique(基础)<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=1492">http://acm.zju.edu.cn/show_problem.php?pid=1492</a><br>题意：图的最大团<br>解法：搜索，如果要求速度，可参考下相应论文</p>
<p><strong> 其他</strong> <br>不能成大类的</p>
<p>POJ 1470 - Closest Common Ancestors(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1470">http://acm.pku.edu.cn/JudgeOnline/problem?id=1470</a><br>题意：LCA问题<br>解法：tarjan或RMQ，另外输入很恶心</p>
<p>POJ 1985 - Cow Marathon(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1985">http://acm.pku.edu.cn/JudgeOnline/problem?id=1985</a><br>题意：树上的最长路径<br>解法：dp</p>
<p>POJ 1986 - Distance Queries(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1986">http://acm.pku.edu.cn/JudgeOnline/problem?id=1986</a><br>题意：LCA<br>解法：tarjan或RMQ</p>
<p>HOJ 11192 - Justice League(有趣的图论)<br><a href="http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11192&amp;courseid=99">http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11192&amp;courseid=99</a></p>
<p>HOJ 11277 - New Island(有趣的图论)<br><a href="http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11277&amp;courseid=109">http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11277&amp;courseid=109</a></p>
</div>
<br> <img src ="http://www.cppblog.com/Ylemzy/aggbug/143031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2011-03-30 16:55 <a href="http://www.cppblog.com/Ylemzy/articles/143031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图论</title><link>http://www.cppblog.com/Ylemzy/articles/126158.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Wed, 08 Sep 2010 06:57:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/126158.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/126158.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/126158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/126158.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/126158.html</trackback:ping><description><![CDATA[<div class=articalTitle>
<h2 class="titName SG_txta" id=t_627609ca0100fh6b>pku图论、网络流入门题总结、汇总</h2>
<span class="time SG_txtc">(2009-10-07 23:25:25)</span>
<div class=turnBoxzz><a class="SG_aBtn SG_aBtn_ico SG_turn" id=quote_set_sign2 onclick="scope.articel_quote_alert &amp;&amp; scope.articel_quote_alert('627609ca0100fh6b');return false;" href="javascript:;"><cite><img class="SG_icon sg_icon111" height=15 src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" width=15 align=absMiddle>转载</cite></a></div>
</div>
<div class=articalTag id=sina_keyword_ad_area>
<table>
    <tbody>
        <tr>
            <td class=blog_tag><script>
            var $tag='杂谈';
            var $tag_code='eb1bb561ab8c3f4eca7a403557180670';
            var $r_quote_bligid='627609ca0100fh6b';
            var $worldcup='0';
            var $worldcupball='0';
            </script><span class=SG_txtb>标签：</span>
            <h3><a href="http://uni.sina.com.cn/c.php?t=blog&amp;k=%E6%9D%82%E8%B0%88&amp;ts=bpost&amp;stype=tag" target=_blank>杂谈</a></h3>
            </td>
            <td class=blog_class><span class=SG_txtb>分类：</span><a href="http://blog.sina.com.cn/s/articlelist_1651902922_1_1.html" target=_blank>acm_图论题</a></td>
        </tr>
    </tbody>
</table>
</div>
<!-- 正文开始 -->
<p>POJ 2449 Remmarguts' Date(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2449">http://acm.pku.edu.cn/JudgeOnline/problem?id=2449</a><br>题意：经典问题：K短路<br>解法：dijkstra+A*(rec)，方法很多<br>相关：<a href="http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144">http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144</a><br>该题亦放在搜索推荐题中</p>
<p>POJ 3013 - Big Christmas Tree(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3013">http://acm.pku.edu.cn/JudgeOnline/problem?id=3013</a><br>题意：最简单最短路，但此题要过，需要较好的程序速度和，还要注意精度<br>解法：Dijkstra</p>
<p>POJ 3463 - Sightseeing(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3463">http://acm.pku.edu.cn/JudgeOnline/problem?id=3463</a><br>题意：最短路和比最短路大1的路的数量<br>解法：需要真正理解dijkstra</p>
<p>POJ 3613 - Cow Relays(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3613">http://acm.pku.edu.cn/JudgeOnline/problem?id=3613</a><br>题意：求经过N条边的最短路<br>解法：floyd + 倍增，贪心</p>
<p>POJ 3621 - Sightseeing Cows(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3621">http://acm.pku.edu.cn/JudgeOnline/problem?id=3621</a><br>题意：求一个环路，欢乐值 / 总路径最大<br>解法：参数搜索 + 最短路(ms 原始的bellman tle, 用spfa才过)</p>
<p>POJ 3635 - full tank?(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3635">http://acm.pku.edu.cn/JudgeOnline/problem?id=3635</a><br>题意：最短路变形<br>解法：广搜<br>相关：<a href="http://hi.baidu.com/hnu_reason/blog/item/086e3dccfc8cb21600e9286b.html">http://hi.baidu.com/hnu_reason/blog/item/086e3dccfc8cb21600e9286b<wbr>.html</a></p>
<p><br>生成树问题<br>基本的生成树就不放上来了</p>
<p>POJ 1639 - Picnic Planning(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1639">http://acm.pku.edu.cn/JudgeOnline/problem?id=1639</a><br>题意：顶点度数有限制的最小生成树<br>解法：贪心 + prim/kruskal</p>
<p>POJ 1679 - The Unique MST(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1679">http://acm.pku.edu.cn/JudgeOnline/problem?id=1679</a><br>题意：判断MST是否唯一<br>解法：prim就行，不过还是易错的题</p>
<p>POJ 2728 - Desert King(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2728">http://acm.pku.edu.cn/JudgeOnline/problem?id=2728</a><br>题意：所谓最优比率生成树<br>解法：参数搜索 + prim</p>
<p>POJ 3164 - Command Network(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3164">http://acm.pku.edu.cn/JudgeOnline/problem?id=3164</a><br>题意：最小树形图<br>解法：刘朱算法，这个考到的可能性比较小吧？</p>
<p>POJ 3522 - Slim Span(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3522">http://acm.pku.edu.cn/JudgeOnline/problem?id=3522</a><br>题意：求一颗生成树，让最大边最小边差值最小<br>解法：kruskal活用</p>
<p>连通性，度数，拓扑问题<br>此类问题主要牵扯到DFS，缩点等技巧</p>
<p>POJ 1236 - Network of Schools(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1236">http://acm.pku.edu.cn/JudgeOnline/problem?id=1236</a><br>题意：问添加多少边可成为完全连通图<br>解法：缩点，看度数</p>
<p>POJ 1659 - Frogs' Neighborhood(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1659">http://acm.pku.edu.cn/JudgeOnline/problem?id=1659</a><br>题意：根据度序列构造图<br>解法：贪心，详细证明参见havel定理</p>
<p>POJ 2553 - The Bottom of a Graph(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2553">http://acm.pku.edu.cn/JudgeOnline/problem?id=2553</a><br>POJ 2186 - Popular Cows(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2186">http://acm.pku.edu.cn/JudgeOnline/problem?id=2186</a><br>题意：强连通分量缩点图出度为0的点</p>
<p>POJ 2762 - Going from u to v or from v to u?(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2762">http://acm.pku.edu.cn/JudgeOnline/problem?id=2762</a><br>题意：单向连通图判定<br>解法：缩点 + dp找最长链</p>
<p>POJ 2914 - Minimum Cut(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2914">http://acm.pku.edu.cn/JudgeOnline/problem?id=2914</a><br>题意：无向图最小割<br>解法：Stoer-Wagner算法，用网络流加枚举判定会挂</p>
<p>POJ 2942 - Knights of the Round Table(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2942">http://acm.pku.edu.cn/JudgeOnline/problem?id=2942</a><br>题意：求双联通分量(或称块)中是否含奇圈<br>解法：求出双连通分量后做黑白染色进行二分图图判定<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/57ada7ed104ce9d2b31cb104.html">http://hi.baidu.com/zfy0701/blog/item/57ada7ed104ce9d2b31cb104<wbr>.html</a></p>
<p>POJ 3177 - Redundant Paths(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3177">http://acm.pku.edu.cn/JudgeOnline/problem?id=3177</a><br>POJ 3352 - Road Construction(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3352">http://acm.pku.edu.cn/JudgeOnline/problem?id=3352</a><br>题意：添加多少条边可成为双向连通图<br>解法：把割边分开的不同分量缩点构树，看入度<br>建议对比下1236，有向图添加多少条边变成强连通图</p>
<p>POJ 3249 - Test for Job(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3249">http://acm.pku.edu.cn/JudgeOnline/problem?id=3249</a><br>解法：bfs / dfs + dp</p>
<p>POJ 3592 - Instantaneous Transference(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3592">http://acm.pku.edu.cn/JudgeOnline/problem?id=3592</a><br>解法：缩点，最长路，少人做的水题，注意细节</p>
<p>POJ 3687 - Labeling Balls(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3687">http://acm.pku.edu.cn/JudgeOnline/problem?id=3687</a><br>解法：拓扑排序</p>
<p>POJ 3694 - Network(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3694">http://acm.pku.edu.cn/JudgeOnline/problem?id=3694</a><br>解法：双连通分量+并查集</p>
<p>2-SAT问题<br>此类问题理解合取式的含义就不难</p>
<p>POJ 2723 - Get Luffy Out(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2723">http://acm.pku.edu.cn/JudgeOnline/problem?id=2723</a><br>POJ 2749 - Building roads(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2749">http://acm.pku.edu.cn/JudgeOnline/problem?id=2749</a><br>解法：二分 + 2-SAT判定</p>
<p>POJ 3207 - Ikki's Story IV - Panda's Trick(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3207">http://acm.pku.edu.cn/JudgeOnline/problem?id=3207</a><br>解法：简单的2-sat，不过其他方法更快</p>
<p>POJ 3648- Wedding(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3648">http://acm.pku.edu.cn/JudgeOnline/problem?id=3648</a><br>解法：用2-sat做会比较有意思，但是暴搜照样0ms</p>
<p>POJ 3678 - Katu Puzzle(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3678">http://acm.pku.edu.cn/JudgeOnline/problem?id=3678</a><br>解法：直接按合取式构图验证就行了</p>
<p>POJ 3683 - Priest John's Busiest Day(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3683">http://acm.pku.edu.cn/JudgeOnline/problem?id=3683</a><br>解法：n^2枚举点之间的相容性构图，求解2-SAT</p>
<p>最大流问题<br>变形很多，最小割最大流定理的理解是关键</p>
<p>POJ 1149 - PIGS(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1149">http://acm.pku.edu.cn/JudgeOnline/problem?id=1149</a><br>绝对经典的构图题</p>
<p>POJ 1273 - Drainage Ditches(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1273">http://acm.pku.edu.cn/JudgeOnline/problem?id=1273</a><br>最大流入门</p>
<p>POJ 1459 - Power Network(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1459">http://acm.pku.edu.cn/JudgeOnline/problem?id=1459</a><br>基本构图</p>
<p>POJ 1637 - Sightseeing tour(Crazy)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1637">http://acm.pku.edu.cn/JudgeOnline/problem?id=1637</a><br>题意：求混合图的欧拉迹是否存在<br>解法：无向边任意定向，构图，详建黑书P324</p>
<p>POJ 1815 - Friendship(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1815">http://acm.pku.edu.cn/JudgeOnline/problem?id=1815</a><br>题意：求最小点割<br>解法：拆点转换为边割<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/a521f230b06dea9fa9018e0e.html">http://hi.baidu.com/zfy0701/blog/item/a521f230b06dea9fa9018e0e<wbr>.html</a></p>
<p>POJ 1966 - Cable TV Network(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1966">http://acm.pku.edu.cn/JudgeOnline/problem?id=1966</a><br>题意：去掉多少点让图不连通<br>解法：任定一源点，枚举汇点求点割集(转换到求边割)，求其中最小的点割</p>
<p>POJ 2112 - Optimal Milking(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2112">http://acm.pku.edu.cn/JudgeOnline/problem?id=2112</a><br>二分枚举，最大流</p>
<p>POJ 2391 - Ombrophobic Bovines(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2391">http://acm.pku.edu.cn/JudgeOnline/problem?id=2391</a><br>题意：floyd, 拆点，二分枚举<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/3e0006c4f73f0eaf8226acff.html">http://hi.baidu.com/zfy0701/blog/item/3e0006c4f73f0eaf8226acff<wbr>.html</a></p>
<p>POJ 2396 - Budget(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2396">http://acm.pku.edu.cn/JudgeOnline/problem?id=2396</a><br>题意：有源汇的上下界可行流<br>解法：用矩阵-网络流模型构图，然后拆边<br>相关：<a href="http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba.html">http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba<wbr>.html</a><br>，最小割模型在竞赛中的应用</p>
<p>POJ 2455 - Secret Milking Machine(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2455">http://acm.pku.edu.cn/JudgeOnline/problem?id=2455</a><br>二分枚举，一般来说需要写对边容量的更新操作而不是每次全部重新构图</p>
<p>POJ 2699 - The Maximum Number of Strong Kings(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2699">http://acm.pku.edu.cn/JudgeOnline/problem?id=2699</a><br>解法：枚举人数 + 最大流(感谢xpcnq_71大牛的建图的提示)</p>
<p>POJ 2987 - Firing(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2987">http://acm.pku.edu.cn/JudgeOnline/problem?id=2987</a><br>题意：最大权闭包<br>解法：先边权放大，第一问总量-最大流，第二问求最小割<br>相关：<a href="http://wywcgs.spaces.live.com/blog/cns%214D861A02A3382142%211109.entry?&amp;_c02_owner=1">http://wywcgs.spaces.live.com/blog/cns!4D861A02A3382142!1109.entry?&amp;_c02_owner=1</a><br>Profit(中等)<br><a href="http://www.vijos.cn/Problem_Show.asp?id=1352">http://www.vijos.cn/Problem_Show.asp?id=1352</a><br>最大权闭包图的特殊情况<br>ZOJ 2071 - Technology Trader 也是此类型，懒了没做<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=2071">http://acm.zju.edu.cn/show_problem.php?pid=2071</a></p>
<p>POJ 3084 - Panic Room(中等，好题)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3084">http://acm.pku.edu.cn/JudgeOnline/problem?id=3084</a><br>题意：略<br>解法：根据最小割建模</p>
<p>POJ 3155 - Hard Life(很挑战一题)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3155">http://acm.pku.edu.cn/JudgeOnline/problem?id=3155</a><br>题意：最大密度子图<br>解法：参数搜索 + 最大权闭合图，A.V.Goldberg的论文(nb解法)<br>最小割模型在信息学竞赛中的应用 一文中也有讲</p>
<p>POJ 3189 - Steady Cow Assignment(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3189">http://acm.pku.edu.cn/JudgeOnline/problem?id=3189</a><br>题意：寻找最小的区间完成匹配<br>解法：这题充分说明SAP的强大，纯暴力可过。更好的方法是在枚举区间的过程中不断删边和加边继续网络流过程</p>
<p>POJ 3204 - Ikki's Story I - Road Reconstruction(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3204">http://acm.pku.edu.cn/JudgeOnline/problem?id=3204</a><br>ZOJ 2532 - Internship(基础)<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=2532">http://acm.zju.edu.cn/show_problem.php?pid=2532</a><br>题意：确定边是否是某个割中的边<br>解法：两边dfs求割, 或暴力枚举(需要写取消某条增广路的操作(但数据弱，也许不取消也能混过))</p>
<p>POJ 3308 - Paratroopers(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3308">http://acm.pku.edu.cn/JudgeOnline/problem?id=3308</a><br>POJ 2125 - Destroying The Graph(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2125">http://acm.pku.edu.cn/JudgeOnline/problem?id=2125</a><br>题意：最小点权覆盖</p>
<p>POJ 3469 - Dual Core CPU(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3469">http://acm.pku.edu.cn/JudgeOnline/problem?id=3469</a><br>题意：最小割</p>
<p>POJ 3498 - March of the Penguins(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3498">http://acm.pku.edu.cn/JudgeOnline/problem?id=3498</a><br>题意：满足点容量限制的网络流<br>解法：拆点把点容量转换为边容量，枚举汇点</p>
<p>ZOJ 2587 - Unique Attack(较难)<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=2587">http://acm.zju.edu.cn/show_problem.php?pid=2587</a><br>题意：确定最小割是否是唯一的<br>解法：得理解dfs求最小割算法的本质</p>
<p>SPOJ 839 - Optimal Marks(难)<br><a href="http://www.spoj.pl/problems/OPTM/">http://www.spoj.pl/problems/OPTM/</a><br>题意：略<br>解法：很经典哦，见amber的集训队论文，根据标号的每一位求最小割</p>
<p>SGU 326 - Perspective(中等)<br><a href="http://acm.sgu.ru/problem.php?c0&amp;problem=326">http://acm.sgu.ru/problem.php?c0&amp;problem=326</a><br>比较经典的构图法</p>
<p>费用流问题<br>可以KM解的就不放在这里，另外，感觉除非很特殊的图，一般用连续增广路的算法就够了</p>
<p>POJ 2175 - Evacuation Plan(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2175">http://acm.pku.edu.cn/JudgeOnline/problem?id=2175</a><br>题意：判断是否给定解是最优解，比较阴的一题<br>解法：根据给出的计划构造流，然后消且只消一次负圈</p>
<p>POJ 3422 - Kaka's Matrix Travels(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3422">http://acm.pku.edu.cn/JudgeOnline/problem?id=3422</a><br>题意：略<br>解法：拆点</p>
<p>POJ 3680 - Intervals(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3680">http://acm.pku.edu.cn/JudgeOnline/problem?id=3680</a><br>题意：略，这题还是蛮经典<br>解法：discuss中比较详细</p>
<p>SPOJ 371 - Boxes(简单)<br><a href="http://www.spoj.pl/problems/BOXES/">http://www.spoj.pl/problems/BOXES/</a><br>题意：略<br>解法：费用流，但似乎有比网络流更好的做法</p>
<p>SGU 185 - Two shortest(中等)<br><a href="http://acm.sgu.ru/problem.php?c0&amp;problem=185">http://acm.sgu.ru/problem.php?c0&amp;problem=185</a><br>题意：求两条不想交的最短路径<br>解法：费用流，也可以最短路 + 最大流。</p>
<p>匹配问题<br>正确理解KM算法是很重要的</p>
<p>这里我还要说几句：最正确解最小权匹配的办法是用一个很大的数-当前边权值，而不是直接对边权取反(这样只能处理左右点相等的完全二分图，即K(n, n)</p>
<p>以上有可能还是说的有点问题，以后补充</p>
<p>POJ 1486 - Sorting Slides(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1486">http://acm.pku.edu.cn/JudgeOnline/problem?id=1486</a><br>题意：二分图的必须边<br>解法：需正真理解最大匹配算法，详见<a href="http://hi.baidu.com/kevin0602/blog/item/1d5be63b5bec9bec14cecb44.html">http://hi.baidu.com/kevin0602/blog/item/1d5be63b5bec9bec14cecb44<wbr>.html</a></p>
<p>POJ 1904 - King's Quest(中等，好题)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1904">http://acm.pku.edu.cn/JudgeOnline/problem?id=1904</a><br>题意：求二分图所有可能的匹配边<br>解法：虽然最终不是用匹配算法，但需要理解匹配的思想转换成强连通分量问题。</p>
<p>POJ 2060 -Taxi Cab Scheme(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2060">http://acm.pku.edu.cn/JudgeOnline/problem?id=2060</a><br>题意：最小路径覆盖</p>
<p>POJ 2594 -Treasure Exploration(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2594">http://acm.pku.edu.cn/JudgeOnline/problem?id=2594</a><br>题意：可相交最小路径覆盖<br>解法：先传递闭包转化下</p>
<p>POJ 3041 - Asteroids(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3041">http://acm.pku.edu.cn/JudgeOnline/problem?id=3041</a><br>POJ 2226 - Muddy Fields(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2226">http://acm.pku.edu.cn/JudgeOnline/problem?id=2226</a><br>题意：行列的覆盖<br>解法：最小点集覆盖 = 最大匹配</p>
<p>POJ 2195 - Going Home(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2195">http://acm.pku.edu.cn/JudgeOnline/problem?id=2195</a><br>题意：最小权值匹配<br>解法：KM算法</p>
<p>POJ 2400 - Supervisor, Supervisee(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2400">http://acm.pku.edu.cn/JudgeOnline/problem?id=2400</a><br>题意：输出所有最小权匹配<br>解法：KM, 然后回溯解，汗，输入的两个矩阵居然是反过来的</p>
<p>POJ 2516 -Minimum Cost(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2516">http://acm.pku.edu.cn/JudgeOnline/problem?id=2516</a><br>题意：最小权值匹配或最小费用流<br>解法：拆点 + KM算法(只有正确的才能过)，费用流(ms错的可能也能过)</p>
<p>POJ 3686 - The Windy's(较难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3686">http://acm.pku.edu.cn/JudgeOnline/problem?id=3686</a><br>题意：最小权值匹配<br>解法：拆点,然后尽管用KM算法去水吧，数据其实弱得不得了 O(50 * 50 * 2500) -&gt; 16ms<br>相关：<a href="http://hi.baidu.com/kevin0602/blog/item/2829dc01d7143b087bec2c97.html">http://hi.baidu.com/kevin0602/blog/item/2829dc01d7143b087bec2c97<wbr>.html</a></p>
<p>SPOJ 412 - K-path cover(较难)<br><a href="https://www.spoj.pl/problems/COVER/">https://www.spoj.pl/problems/COVER/</a><br>题意：略<br>解法：很牛叉的一道匹配<br>相关：<a href="http://hi.baidu.com/roba/blog/item/c842fdfac10d24dcb48f31d7.html">http://hi.baidu.com/roba/blog/item/c842fdfac10d24dcb48f31d7<wbr>.html</a></p>
<p>SGU 206. Roads(较难)<br><a href="http://acm.sgu.ru/problem.php?c0&amp;problem=206">http://acm.sgu.ru/problem.php?c0&amp;problem=206</a><br>解法：经典题目，也可以使用spoj 412那题的优化</p>
<p>NP问题<br>一般是搜索或dp解的</p>
<p>POJ 1419 - Graph Coloring(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1419">http://acm.pku.edu.cn/JudgeOnline/problem?id=1419</a><br>题意：图的着色<br>解法：搜索，可惜题目的数据真是太弱了</p>
<p>POJ 2989 - All Friends(难)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2989">http://acm.pku.edu.cn/JudgeOnline/problem?id=2989</a><br>题意：极大团数量<br>解法：开始狂tle, 后来找了论文：Finding All Cliques of an Undirected Graph（Coen Bron &amp; Joep Kerboscht）</p>
<p>ZOJ 1492 - Maximum Clique(基础)<br><a href="http://acm.zju.edu.cn/show_problem.php?pid=1492">http://acm.zju.edu.cn/show_problem.php?pid=1492</a><br>题意：图的最大团<br>解法：搜索，如果要求速度，可参考下相应论文</p>
<p>其他<br>不能成大类的</p>
<p>POJ 1470 - Closest Common Ancestors(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1470">http://acm.pku.edu.cn/JudgeOnline/problem?id=1470</a><br>题意：LCA问题<br>解法：tarjan或RMQ，另外输入很恶心</p>
<p>POJ 1985 - Cow Marathon(基础)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1985">http://acm.pku.edu.cn/JudgeOnline/problem?id=1985</a><br>题意：树上的最长路径<br>解法：dp</p>
<p>POJ 1986 - Distance Queries(中等)<br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1986">http://acm.pku.edu.cn/JudgeOnline/problem?id=1986</a><br>题意：LCA<br>解法：tarjan或RMQ</p>
<p>HOJ 11192 - Justice League(有趣的图论)<br><a href="http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11192&amp;courseid=99">http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11192&amp;courseid=99</a></p>
<p>HOJ 11277 - New Island(有趣的图论)<br><a href="http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11277&amp;courseid=109">http://acm.hnu.cn:8080/online/?action=problem&amp;type=show&amp;id=11277&amp;courseid=109</a></p>
<img src ="http://www.cppblog.com/Ylemzy/aggbug/126158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-09-08 14:57 <a href="http://www.cppblog.com/Ylemzy/articles/126158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树同构</title><link>http://www.cppblog.com/Ylemzy/articles/124918.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Fri, 27 Aug 2010 02:15:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/124918.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/124918.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/124918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/124918.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/124918.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Bean LanguageDescriptionIn the year 2099, the people in Earth established diplomatic relations between aliens from Pegasus galaxy. The Pegasusan people developed a kind of language called Bean Lan...&nbsp;&nbsp;<a href='http://www.cppblog.com/Ylemzy/articles/124918.html'>阅读全文</a><img src ="http://www.cppblog.com/Ylemzy/aggbug/124918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-08-27 10:15 <a href="http://www.cppblog.com/Ylemzy/articles/124918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树状数组</title><link>http://www.cppblog.com/Ylemzy/articles/98322.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Sun, 11 Oct 2009 11:48:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/98322.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/98322.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/98322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/98322.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/98322.html</trackback:ping><description><![CDATA[		<span style="color: #0010ff;">树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。</span>
<br style="color: #0010ff;">&nbsp;<span style="color: #8a3300;">在解题过程中，我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。</span>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 但是不难发现，如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以说，每次修改A[i]后，调整前缀和S[]在最坏情况下会需要O(n)的时间。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 当n非常大时，程序会运行得非常缓慢。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;因此，这里我们引入&#8220;树状数组&#8221;，它的修改与求和都是O(logn)的，效率非常高。</p>
<p style="color: #8a3300;">【理论】</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了对树状数组有个形 象的认识，我们先看下面这张图。</p>
<p style="color: #8a3300;"><img alt="" src="http://www.cppblog.com/images/cppblog_com/ylemzy/b_25F1665EFE7011E2D2EF878AB4C18939.jpg" align="left" height="321" width="500"><br><a href="http://fqq11679.photo.hexun.com/46304845_d.html" target="_blank"></a></p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;如图所示，红色矩形表示的数组C[]就是树状数组。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里，C[i]表示A[i-2^k+1]到A[i]的和，而k则是i在二进制时末尾0的个数，</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者说是i用2的幂方和表示时的最小指数。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 当然，利用位运算，我们可以直接计算出2^k=i&amp;(i^(i-1)) ）</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时，我们也不难发现，这个k就是该节点在树中的高度，因而这个树的高度不会超过logn。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以,当我们修改A[i]的值时，可以从C[i]往根节点一路上溯，调整这条路上的所有C[]即可，</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个操作的复杂度在最坏情况下就是树的高度即O(logn)。&nbsp;&nbsp;</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另外，对于求数列的前n项和，只需找到n以前的所有最大子树，把其根节点的C加起来即可。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不难发现，这些子树的数目是n在二进制时1的个数，或者说是把n展开成2的幂方和时的项数,</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此，求和操作的复杂度也是O(logn)。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着，我们考察这两种操作下标变化的规律：</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先看修改操作：</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 已知下标i，求其父节点的下标。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可以考虑对树从逻辑上转化：</p>
<p style="color: #8a3300;"><img alt="" src="http://www.cppblog.com/images/cppblog_com/ylemzy/b_D394E00A5DDCCB42C41D983528C5FA50.jpg" align="left" height="345" width="500"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如图，我们将子树向右对称翻折，虚拟出一些空白结点（图中白色），将原树转化成完全二叉树。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有图可知，对于节点i，其父节点的下标与翻折出的空白节点下标相同。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因而父节点下标 p=i+2^k&nbsp; (2^k是i用2的幂方和展开式中的最小幂，即i为根节点子树的规模)</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即&nbsp; p = i + i&amp;(i^(i-1))&nbsp;。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接着对于求和操作：</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为每棵子树覆盖的范围都是2的幂，所以我们要求子树i的前一棵树，只需让i减去2的最小幂即可。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即&nbsp; p =&nbsp;i - i&amp;(i^(i-1)) 。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此，我们已经比较详细的分析了树状数组的复杂度和原理。 </p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在最后，我们将给出一些树状数组的实现代码，希望读者能够仔细体会其中的细节。</p>
<p>【代码】</p>
<p>&nbsp; 求最小幂2^k:
</p>
<table class="fck__showtableborders" style="margin: 10px;" cellpadding="10" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td bgcolor="#eeeeee"><font face="Courier New"><br><font color="#993300">int Lowbit(int t) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;return t &amp; ( t ^ ( t - 1 ) ); <br>} </font><br></font></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;求前n项和：<br></p>
<table class="fck__showtableborders" style="margin: 10px;" cellpadding="10" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td bgcolor="#eeeeee"><font face="Courier New"><br><font color="#993300">int Sum(int end) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;int sum = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp;while(end &gt; 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += in[end]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end -= Lowbit(end); <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;return sum; <br>} <br></font></font></td>
        </tr>
    </tbody>
</table>
<br>&nbsp;对某个元素进行加法操作：&nbsp;<br><font face="Courier New"><br><font color="#993300">void plus(int pos , int num) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;while(pos &lt;= n) <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in[pos] += num; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos += Lowbit(pos); <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>} </font></font><br style="color: #0010ff;"><span style="color: #0010ff;"></span><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"></span><br></div><img src ="http://www.cppblog.com/Ylemzy/aggbug/98322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2009-10-11 19:48 <a href="http://www.cppblog.com/Ylemzy/articles/98322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>