﻿<?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++博客-西风萧瑟@HDU-随笔分类-图论</title><link>http://www.cppblog.com/doer-xee/category/12385.html</link><description>One step and One step...</description><language>zh-cn</language><lastBuildDate>Mon, 07 Dec 2009 15:25:14 GMT</lastBuildDate><pubDate>Mon, 07 Dec 2009 15:25:14 GMT</pubDate><ttl>60</ttl><item><title>PKU 最短路题目 小结【不断更新中...】</title><link>http://www.cppblog.com/doer-xee/archive/2009/12/05/102608.html</link><dc:creator>西风萧瑟</dc:creator><author>西风萧瑟</author><pubDate>Sat, 05 Dec 2009 09:10:00 GMT</pubDate><guid>http://www.cppblog.com/doer-xee/archive/2009/12/05/102608.html</guid><wfw:comment>http://www.cppblog.com/doer-xee/comments/102608.html</wfw:comment><comments>http://www.cppblog.com/doer-xee/archive/2009/12/05/102608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/doer-xee/comments/commentRss/102608.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/doer-xee/services/trackbacks/102608.html</trackback:ping><description><![CDATA[&nbsp;
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">昂贵的聘礼 <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1062">http://acm.pku.edu.cn/JudgeOnline/problem?id=1062</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 99.21%; PADDING-RIGHT: 5px; HEIGHT: 177px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">Dijkstra算法就可以了，权非负；<br><br>有的物品对应有替代品&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;优惠价格，反过来考虑，即替代物品&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;优惠价格就达到原来的物品，建图；<br><br>增加一个顶点，连接每个顶点，权值等于该顶点的价值，相当于你直接支付；<br><br>难点在于等级限制M；&nbsp;枚举&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;删顶点；<br><br>因为你最后始终要到达顶点1，满足等级限制条件还要访问顶点&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">？<br><br>一次枚举&nbsp;(lv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;M)&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">&nbsp;lv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]，&#8230;&#8230;，lv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">&nbsp;(lv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;M)&nbsp;，把不符合条件的顶点给予visit[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;</span></div>
<br>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><br>&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Stockbroker Grapevine <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1125">http://acm.pku.edu.cn/JudgeOnline/problem?id=1125</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 99.32%; PADDING-RIGHT: 5px; HEIGHT: 55px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">考察flyod算法，先求出每个点到其他顶点的距离，然后选出其中的最大值，即为这个点到达所有顶点的最大距离；如果最大值为初始化的INF，则该点不能到达所有点；<br><br>然后再从能到达所有点中的集合点选出最小值；</span></div>
<br>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><br>&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Invitation Cards <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1511">http://acm.pku.edu.cn/JudgeOnline/problem?id=1511</a></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 99.28%; PADDING-RIGHT: 5px; HEIGHT: 58px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">对SPFA邻接表实现的考察，bellman_ford,dijkstra都会超时；<br><br>求每个志愿者来回的最短路，ccs&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;ccs,前一部分由正向图对顶点1做一次单源最短路即可，建立逆向图再次求解就是第二部分；</span></div>
<br>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><br>&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Currency Exchange <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1860">http://acm.pku.edu.cn/JudgeOnline/problem?id=1860</a> </p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 99.29%; PADDING-RIGHT: 5px; HEIGHT: 50px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">Bellman_ford算法；从银行实现2种货币的兑换可以认为每种货币相当于一个顶点，每家银行相当于连接两个顶点的一条边；求是否存在一条路径u&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;b&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&#8230;&#8230;&nbsp;u，权值之和大于原来的值；</span></div>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">MPI Maelstrom <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1502">http://acm.pku.edu.cn/JudgeOnline/problem?id=1502</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Heavy Transportation <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1797">http://acm.pku.edu.cn/JudgeOnline/problem?id=1797</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Arbitrage <a href="http://acm.hdu.edu.cn/showproblem.php?pid=1217">http://acm.hdu.edu.cn/showproblem.php?pid=1217<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 99.27%; PADDING-RIGHT: 5px; HEIGHT: 49px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">同HDU&nbsp;</span><span style="COLOR: #000000">1217</span></div>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><br></a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Frogger <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2253">http://acm.pku.edu.cn/JudgeOnline/problem?id=2253</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Til the Cows Come Home <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2387">http://acm.pku.edu.cn/JudgeOnline/problem?id=2387</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Wormholes <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3259">http://acm.pku.edu.cn/JudgeOnline/problem?id=3259</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Silver Cow Party <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3268">http://acm.pku.edu.cn/JudgeOnline/problem?id=3268</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Big Christmas Tree <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3013">http://acm.pku.edu.cn/JudgeOnline/problem?id=3013</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Skiing <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3037">http://acm.pku.edu.cn/JudgeOnline/problem?id=3037</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Candies <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3159">http://acm.pku.edu.cn/JudgeOnline/problem?id=3159</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Cow Hurdles <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3615">http://acm.pku.edu.cn/JudgeOnline/problem?id=3615</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">Cow Contest <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3660">http://acm.pku.edu.cn/JudgeOnline/problem?id=3660</a></p>
<img src ="http://www.cppblog.com/doer-xee/aggbug/102608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/doer-xee/" target="_blank">西风萧瑟</a> 2009-12-05 17:10 <a href="http://www.cppblog.com/doer-xee/archive/2009/12/05/102608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 最短路题目小结</title><link>http://www.cppblog.com/doer-xee/archive/2009/12/04/102552.html</link><dc:creator>西风萧瑟</dc:creator><author>西风萧瑟</author><pubDate>Fri, 04 Dec 2009 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/doer-xee/archive/2009/12/04/102552.html</guid><wfw:comment>http://www.cppblog.com/doer-xee/comments/102552.html</wfw:comment><comments>http://www.cppblog.com/doer-xee/archive/2009/12/04/102552.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/doer-xee/comments/commentRss/102552.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/doer-xee/services/trackbacks/102552.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">最短路&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=2544</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;赤裸裸的最短路<br><br>A&nbsp;Walk&nbsp;Through&nbsp;the&nbsp;Forest&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=1142</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">He&nbsp;considers&nbsp;taking&nbsp;a&nbsp;path&nbsp;from&nbsp;A&nbsp;to&nbsp;B&nbsp;to&nbsp;be&nbsp;progress&nbsp;if&nbsp;there&nbsp;exists&nbsp;a&nbsp;route&nbsp;from&nbsp;B&nbsp;to&nbsp;his&nbsp;home&nbsp;that&nbsp;is&nbsp;shorter&nbsp;than&nbsp;any&nbsp;possible&nbsp;route&nbsp;from&nbsp;A.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;重在理解这句话。先求出所有顶点到顶点2的最短路(以顶点2为源点做一次Dijkstra)，然后从顶点1开始记忆化搜索。<br>If&nbsp;(d[u]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d[v])<br>Sum&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;bfs(v);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Minimum&nbsp;Transport&nbsp;Cost&nbsp;&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=1385</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Floyd路径输出，题目要按路径的字典序输出；<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(p[i][k]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;p[k][j]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;map[i][j]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;path[i][k]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;path[i][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[i][j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;path[i][k];<br>&nbsp;&nbsp;&nbsp;&nbsp;即可<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>Arbitrage&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=1217</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;问题是是否可以盈利，如果我们把汇率看成边，当一个点通过某些路径返回到自己后的值大于1，则盈利；<br><br>A&nbsp;strange&nbsp;lift&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=1548</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;因为边的权值都为1，BFS，Dijkstra都可以<br><br>&nbsp;
<p><strong><span>一个人的旅行</span></strong><span><a href="http://acm.hdu.edu.cn/showproblem.php?pid=2066">http://acm.hdu.edu.cn/showproblem.php?pid=2066</a> </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>需要构图，另外建立</span><span>2</span><span>个点，分别各乘车城市，草儿想去的地方相连，权值为</span><span>0</span><span>；则问题转化为单源最短路问题；</span></p>
<br><br>The&nbsp;shortest&nbsp;path&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=2224</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Bitonic&nbsp;path&nbsp;(详见《算法导论》&nbsp;P217)<br>&nbsp;&nbsp;&nbsp;&nbsp;一个人从p1严格地增的走到pn，然后再严格递减的回到p1;求总路径的最小值；<br>&nbsp;&nbsp;&nbsp;&nbsp;网上看到很多解题报告<img src="http://www.cppblog.com/Images/dot.gif">看的我直冒汗&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;对于1&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n,&nbsp;我们定义P(i,&nbsp;j)是一条包含了P1,&nbsp;P2,&nbsp;P3&nbsp;&#8230;&#8230;&nbsp;Pj的途径;&nbsp;这条路径可以分成2部分：递减序列与递增序列，起点是Pi(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;j)，拐点是P1，终点是Pj,&nbsp;P[i,&nbsp;j]为其最小值；那么状态转移方程为：<br>&nbsp;&nbsp;&nbsp;&nbsp;b[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">P1P2</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1时，&nbsp;b[i,j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b[i,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">Pj</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1Pj</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;点Pj</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1在递增序列中，<br>&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1时，&nbsp;b[i,j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;min{&nbsp;b[k,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">PkPj</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;}&nbsp;&nbsp;点Pj</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1在递减序列中<br>&nbsp;&nbsp;&nbsp;&nbsp;b[n,n]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b[n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">Pn</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1Pn</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>The&nbsp;Shortest&nbsp;Path&nbsp;http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">acm.hdu.edu.cn/showproblem.php?pid=2807</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Floyd与多次Dijkstra都可以；<br>A</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">C,&nbsp;A,C连同；<br>我们不妨可以对于每两个城市相乘，把得到的矩阵跟非A，B比较，而不要对于A,C去寻找是否存在这样一个B，结果很容易超时<br>&nbsp;&nbsp;&nbsp;&nbsp;另外，这里有个优化是矩阵的比较&nbsp;（2维转化成1维）<br></span></div>
<img src ="http://www.cppblog.com/doer-xee/aggbug/102552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/doer-xee/" target="_blank">西风萧瑟</a> 2009-12-04 17:12 <a href="http://www.cppblog.com/doer-xee/archive/2009/12/04/102552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>矩阵的快速比较 HDU2807 The Shortest Path</title><link>http://www.cppblog.com/doer-xee/archive/2009/12/04/102503.html</link><dc:creator>西风萧瑟</dc:creator><author>西风萧瑟</author><pubDate>Fri, 04 Dec 2009 01:05:00 GMT</pubDate><guid>http://www.cppblog.com/doer-xee/archive/2009/12/04/102503.html</guid><wfw:comment>http://www.cppblog.com/doer-xee/comments/102503.html</wfw:comment><comments>http://www.cppblog.com/doer-xee/archive/2009/12/04/102503.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/doer-xee/comments/commentRss/102503.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/doer-xee/services/trackbacks/102503.html</trackback:ping><description><![CDATA[<a href="http://acm.hdu.edu.cn/showproblem.php?pid=2807">http://acm.hdu.edu.cn/showproblem.php?pid=2807</a><br><br>常规矩阵比较复杂度是O(n^2), 我们可把2维的数组乘以一个一维数组&nbsp; 来比较<br>通过这道题的测试，效果灰常让人吃惊。。。<br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/doer-xee/2807.png" width=730 height=76><br>常规比较的代码用C++提交超时，但是G++可以过掉，1484MS<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;N&nbsp;81</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INF&nbsp;99999999</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;map[N][N],&nbsp;n,&nbsp;m;<br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;node{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Map[N][N];<br>}&nbsp;rec[N];<br><br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;nnode{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Map[N];<br>}recone[N];<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(recone[x].Map[i]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;recone[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].Map[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;map[a][x]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;creat(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;s;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recone[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].Map[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recone[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].Map[i]&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;rec[a].Map[i][j]&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;recone[b].Map[j];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp(a,&nbsp;i);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断&nbsp;a&nbsp;与&nbsp;i的关系</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j,&nbsp;k;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m),&nbsp;n</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">m)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(map[i][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;map[j][i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;INF;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化矩阵之间关系</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recone[k].Map[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rec[k].Map[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recone[k].Map[i]&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;rec[k].Map[i][j]&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;j;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;2-&gt;1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;接受矩阵信息</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;creat(i,&nbsp;j);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;处理矩阵&nbsp;i*j</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(map[i][k]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;map[k][j]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;map[i][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;map[i][k]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">map[k][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">i,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(map[i][j]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;INF)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;map[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sorry\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span></div>
<img src ="http://www.cppblog.com/doer-xee/aggbug/102503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/doer-xee/" target="_blank">西风萧瑟</a> 2009-12-04 09:05 <a href="http://www.cppblog.com/doer-xee/archive/2009/12/04/102503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图论的知识点 </title><link>http://www.cppblog.com/doer-xee/archive/2009/11/27/102059.html</link><dc:creator>西风萧瑟</dc:creator><author>西风萧瑟</author><pubDate>Fri, 27 Nov 2009 06:37:00 GMT</pubDate><guid>http://www.cppblog.com/doer-xee/archive/2009/11/27/102059.html</guid><wfw:comment>http://www.cppblog.com/doer-xee/comments/102059.html</wfw:comment><comments>http://www.cppblog.com/doer-xee/archive/2009/11/27/102059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/doer-xee/comments/commentRss/102059.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/doer-xee/services/trackbacks/102059.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">路径问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">1边权最短路径<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BFS<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;非负边权最短路径（Dijkstra）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以用Dijkstra解决问题的特征<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;负边权最短路径<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bellman</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Ford<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bellman</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Ford的Yen</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">氏优化<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;差分约束系统<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Floyd<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;广义路径问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传递闭包<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;极小极大距离&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;极大极小距离<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Euler&nbsp;Path&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;Tour<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈套圈算法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;混合图的&nbsp;Euler&nbsp;Path&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;Tour<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hamilton&nbsp;Path&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;Tour<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;特殊图的Hamilton&nbsp;Path&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;Tour&nbsp;构造<br><br>&nbsp;&nbsp;&nbsp;&nbsp;生成树问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最小生成树<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第k小生成树<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最优比率生成树<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">1分数规划<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;度限制生成树<br><br>&nbsp;&nbsp;&nbsp;&nbsp;连通性问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;强大的DFS算法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无向图连通性<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;割点<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;割边<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二连通分支<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有向图连通性<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;强连通分支<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">SAT<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最小点基<br><br>&nbsp;&nbsp;&nbsp;&nbsp;有向无环图<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拓扑排序<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有向无环图与动态规划的关系<br><br>&nbsp;&nbsp;&nbsp;&nbsp;二分图匹配问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般图问题与二分图问题的转换思路<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最大匹配<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有向图的最小路径覆盖<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;1矩阵的最小覆盖<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;完备匹配<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最优匹配<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;稳定婚姻<br><br>&nbsp;&nbsp;&nbsp;&nbsp;网络流问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网络流模型的简单特征和与线性规划的关系<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最大流最小割定理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最大流问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有上下界的最大流问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;循环流<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最小费用最大流&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;最大费用最大流<br><br>&nbsp;&nbsp;&nbsp;&nbsp;弦图的性质和判定<br><br></span></div>
<img src ="http://www.cppblog.com/doer-xee/aggbug/102059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/doer-xee/" target="_blank">西风萧瑟</a> 2009-11-27 14:37 <a href="http://www.cppblog.com/doer-xee/archive/2009/11/27/102059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dijkstra算法的优化（堆+邻接表，优先队列+邻接表）hdu2544</title><link>http://www.cppblog.com/doer-xee/archive/2009/11/26/101972.html</link><dc:creator>西风萧瑟</dc:creator><author>西风萧瑟</author><pubDate>Thu, 26 Nov 2009 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/doer-xee/archive/2009/11/26/101972.html</guid><wfw:comment>http://www.cppblog.com/doer-xee/comments/101972.html</wfw:comment><comments>http://www.cppblog.com/doer-xee/archive/2009/11/26/101972.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/doer-xee/comments/commentRss/101972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/doer-xee/services/trackbacks/101972.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Dijkstra算法的核心：选出一个已经求出最短路的点，加上一条边求出另一个点的最短路；d'[v]=min{d[u]+w(u,v)|u的最短距离已求出且边（u,v)存在}&nbsp; 借助堆取出d[u];http://acm.hdu.edu.cn/showproblem.php?pid=2544堆+邻接表花了一上午。。。#include&lt;iostream&gt;using&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/doer-xee/archive/2009/11/26/101972.html'>阅读全文</a><img src ="http://www.cppblog.com/doer-xee/aggbug/101972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/doer-xee/" target="_blank">西风萧瑟</a> 2009-11-26 14:48 <a href="http://www.cppblog.com/doer-xee/archive/2009/11/26/101972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>