﻿<?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++博客-风雨兼程</title><link>http://www.cppblog.com/change/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:14:16 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:14:16 GMT</pubDate><ttl>60</ttl><item><title>左键右键，只是玩玩</title><link>http://www.cppblog.com/change/archive/2012/09/11/190289.html</link><dc:creator>意洋</dc:creator><author>意洋</author><pubDate>Tue, 11 Sep 2012 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/change/archive/2012/09/11/190289.html</guid><wfw:comment>http://www.cppblog.com/change/comments/190289.html</wfw:comment><comments>http://www.cppblog.com/change/archive/2012/09/11/190289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/change/comments/commentRss/190289.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/change/services/trackbacks/190289.html</trackback:ping><description><![CDATA[<title>left &amp; right mouse</title>
click out of the box<br />
<hr />
<table bgcolor="lightblue" border="4" height="200" width="300">
     <tbody>
         <tr id="test" name="test" onmousedown="alert(&quot;click_in_box&quot;)">
             <td>click in the box
             </td>
         </tr>
     </tbody>
</table><img src ="http://www.cppblog.com/change/aggbug/190289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/change/" target="_blank">意洋</a> 2012-09-11 17:06 <a href="http://www.cppblog.com/change/archive/2012/09/11/190289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转 poj 3352 Tarjan</title><link>http://www.cppblog.com/change/archive/2012/08/21/187877.html</link><dc:creator>意洋</dc:creator><author>意洋</author><pubDate>Tue, 21 Aug 2012 12:40:00 GMT</pubDate><guid>http://www.cppblog.com/change/archive/2012/08/21/187877.html</guid><wfw:comment>http://www.cppblog.com/change/comments/187877.html</wfw:comment><comments>http://www.cppblog.com/change/archive/2012/08/21/187877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/change/comments/commentRss/187877.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/change/services/trackbacks/187877.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">好文章，分享一个&nbsp;<br /><strong><strong>转载请注明出处：優YoU</strong>&nbsp;<a href="http://blog.csdn.net/lyy289065406/article/details/6762370" style="color: #ff9900; text-decoration: none; ">http://blog.csdn.net/lyy289065406/article/details/6762370</a></strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><strong></strong>&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><strong></strong>&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><strong></strong>&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><strong><span style="font-size: 32px; color: #ff0000; ">大致题意：</span></strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">某个企业想把一个热带天堂岛变成旅游胜地，岛上有N个旅游景点，任意2个旅游景点之间有路径连通（注意不一定是直接连通）。而为了给游客提供更方便的服务，该企业要求道路部门在某些道路增加一些设施。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">道路部门每次只会选择一条道路施工，在该条道路施工完毕前，其他道路依然可以通行。然而有道路部门正在施工的道路，在施工完毕前是禁止游客通行的。这就导致了在施工期间游客可能无法到达一些景点。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">为了在施工期间所有旅游景点依然能够正常对游客开放，该企业决定搭建一些临时桥梁，使得不管道路部门选在哪条路进行施工，游客都能够到达所有旅游景点。给出当下允许通行的R条道路，问该企业至少再搭建几条临时桥梁，才能使得游客无视道路部门的存在到达所有旅游景点？</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><strong><span style="font-size: 32px; color: #ff0000; ">解题思路：</span></strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">做过POJ2942后，这题根本就是水题嘛= =</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">首先建立模型：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>给定一个连通的无向图G，至少要添加几条边，才能使其变为双连通图。</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模型很简单，正在施工的道路我们可以认为那条边被删除了。那么一个图G能够在删除任意一条边后，仍然是连通的，当且仅当图G至少为双连通的。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PS：不要问我为什么不是3-连通、4-连通...人家题目问&#8220;至少添加几条边&#8221;好不...</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显然，当图G存在桥（割边）的时候，它必定不是双连通的。桥的两个端点必定分别属于图G的两个【边双连通分量】（注意不是点双连通分量），一旦删除了桥，这两个【边双连通分量】必定断开，图G就不连通了。但是如果在两个【边双连通分量】之间再添加一条边，桥就不再是桥了，这两个【边双连通分量】之间也就是双连通了。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么如果图G有多个【边双连通分量】呢？至少应该添加多少条边，才能使得任意两个【边双连通分量】之间都是双连通（也就是图G是双连通的）？</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个问题就是本题的问题。要解决这个问题：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">1、&nbsp; 首先要找出图G的所有【边双连通分量】。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Tarjan算法用来寻找图G的所有【边双连通分量】是最简单有效的方法，因为Tarjan算法在DFS过程中会对图G所有的结点都生成一个Low值，而由于题目已表明任意两个结点之间不会出现重边，因此Low值相同的两个结点必定在同一个【边双连通分量】中！&nbsp; （如果是有重边的话，那么不同的low值是可能是属于同一个边双连通分量的，这个时候就要通过其他方法去求解边双连通分量。不过这不是本题要讨论的）</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">2、&nbsp; 把每一个【边双连通分量】都看做一个点（即【缩点】）</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">也有人称【缩点】为【块】，都是一样的。其实缩点不是真的缩点，只要利用Low值对图G的点分类处理，就已经缩点了。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><img alt="" src="http://hi.csdn.net/attachment/201109/9/0_1315529561z5Y0.gif" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">以样例1为例，样例1得到的图G为上左图，</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">其中Low[4]=Low[9]=Low[10]</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Low[3]=Low[7]=Low[8]</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Low[2]=Low[5]=Low[6]</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Low[1]独自为政....</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">把Low值相同的点划分为一类，每一类就是一个【边双连通分量】，也就是【缩点】了，不难发现，连接【缩点】之间的边，都是图G的桥，那么我们就得到了上右图以缩点为结点，已桥为树边所构造成的树。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">3、&nbsp; 问题再次被转化为&#8220;至少在缩点树上增加多少条树边，使得这棵树变为一个双连通图&#8221;。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">首先知道一条等式：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">若要使得任意一棵树，在增加若干条边后，变成一个双连通图，那么</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><strong>至少增加的边数 =（ 这棵树总度数为1的结点数 + 1 ）/ 2</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">（证明就不证明了，自己画几棵树比划一下就知道了）</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">那么我们只需求缩点树中总度数为1的结点数（即叶子数）有多少就可以了。换而言之，我们只需求出所有缩点的度数，然后判断度数为1的缩点有几个，问题就解决了。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">4、&nbsp; 求出所有缩点的度数的方法</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">两两枚举图G的直接连通的点，只要这两个点不在同一个【缩点】中，那么它们各自所在的【缩点】的度数都+1。注意由于图G时无向图，这样做会使得所有【缩点】的度数都是真实度数的2倍，必须除2后再判断叶子。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">===================================================================</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">附上述知识点的相关传送门，不懂就马上学吧！</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">有关图论的知识点的定义：<a href="http://www.byvoid.com/blog/biconnect/" style="color: #ff9900; text-decoration: none; ">http://www.byvoid.com/blog/biconnect/</a></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Tarjan算法入门基础：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><a href="http://hi.baidu.com/lydrainbowcat/blog/item/42a6862489c98820c89559f3.html" style="color: #ff9900; text-decoration: none; ">http://hi.baidu.com/lydrainbowcat/blog/item/42a6862489c98820c89559f3.html</a></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Tarjan算法应用扩展：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><a href="http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html" style="color: #ff9900; text-decoration: none; ">http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html</a></p><img src ="http://www.cppblog.com/change/aggbug/187877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/change/" target="_blank">意洋</a> 2012-08-21 20:40 <a href="http://www.cppblog.com/change/archive/2012/08/21/187877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1061 青蛙的约会</title><link>http://www.cppblog.com/change/archive/2012/08/02/186066.html</link><dc:creator>意洋</dc:creator><author>意洋</author><pubDate>Thu, 02 Aug 2012 13:30:00 GMT</pubDate><guid>http://www.cppblog.com/change/archive/2012/08/02/186066.html</guid><wfw:comment>http://www.cppblog.com/change/comments/186066.html</wfw:comment><comments>http://www.cppblog.com/change/archive/2012/08/02/186066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/change/comments/commentRss/186066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/change/services/trackbacks/186066.html</trackback:ping><description><![CDATA[这是一道扩展欧几里德的题，对于我这个才学算法半年的新手来说，理解它还是花了不少时间的。下面详细介绍，分享我的经验，希望能对同样对算法有兴趣的朋友有一点点帮助。<br />
<br />
首先是欧几里德：<br />
a,b的最大公约数表示为gcd(a,b), 则gcd(a, b)=gcd(b, a%b).<br />
用a%b=a-a/b*b不难证明。重点是扩展欧几里德。<br />
<br />
扩展欧几里德：<br />
求ax+by=c是否有整数解及有解时的解。（a, b, c均为整数）。<br />
首先，当c为gcd(a,b)的整数倍时才有整数解。<br />
设a=a1*g, b=b1*g, &nbsp;故c=ax+by=g*a1*x+g*b1*y，故有解时c必然是g的整数倍。<br />
将a,b,c除g后得到新的ax+by=c(此时a,b互质)<br />
<br />
下面先求ax+by=1的解。<br />
考虑ax+by=1............................(1)<br />
又bx+(a%b)y=1........................(2)<br />
=&gt;bx+(a-a/b*b)y=1<br />
=&gt;ay+b(x-a/b*y)=1..................(3)<br />
若x', y'为(2)的解，则可推得(1)的解为x=y', y=x'-a/b*b*y;<br />
在边界时，b=0,a=1(a,b互质)，固有一组特解x=1, y=0;<br />
这样就可以求得(1)的一组解，乘一个常数c就是原方程的一组解，进而得到通解。<br />
核心代码如下：<br />
&nbsp; &nbsp; int x, y;<br />
<br />
<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;exGcd(<span style="color: #0000FF; ">int</span>&nbsp;a,<span style="color: #0000FF; ">int</span>&nbsp;b)<br />
<span style="color: #008080; ">&nbsp;2</span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;b==0&nbsp;)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=1;&nbsp;y=0;&nbsp;&nbsp;<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exGcd(b,&nbsp;a%b);<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t;<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;x;&nbsp;<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;y;&nbsp;<br />
<span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;t&nbsp;-&nbsp;a/b*y;&nbsp;<br />
<span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />
<span style="color: #008080; ">12</span>&nbsp;}</div>
除了poj1061，poj2142 ，poj2115也属于这类题。<br />
<br />
特别感谢<a href="http://hi.baidu.com/blackstar08/blog/item/5a1b9a2687d07f08918f9d73.html">http://hi.baidu.com/blackstar08/blog/item/5a1b9a2687d07f08918f9d73.html</a>的作者和这篇文章，为我的理解和推理帮助了不少。&nbsp;<img src ="http://www.cppblog.com/change/aggbug/186066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/change/" target="_blank">意洋</a> 2012-08-02 21:30 <a href="http://www.cppblog.com/change/archive/2012/08/02/186066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj3287</title><link>http://www.cppblog.com/change/archive/2012/07/29/185525.html</link><dc:creator>意洋</dc:creator><author>意洋</author><pubDate>Sun, 29 Jul 2012 01:33:00 GMT</pubDate><guid>http://www.cppblog.com/change/archive/2012/07/29/185525.html</guid><wfw:comment>http://www.cppblog.com/change/comments/185525.html</wfw:comment><comments>http://www.cppblog.com/change/archive/2012/07/29/185525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/change/comments/commentRss/185525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/change/services/trackbacks/185525.html</trackback:ping><description><![CDATA[这是一道简单的快排+贪心的题，作为新手还是可以写的。<br />题目要求：组数最小，并且每组个数的最大值最小（即尽量平均）。<br />思路如下：首先，在给定的n个数中找出众数max及它的个数maxp，由于同样大小的物件不能相互嵌套，只能一一为一组，故maxp即是最小组数，然后排序。分组时，第i+1(0&lt;=i&lt;max)组的内容为数组中下标是i+k*maxp(k=0,1,2...)的数，这样取即可保证每组内一定可以相互嵌套（没有相同的数），又使得每组个数的最大值最小。<br />第一次写题解啊！加油！<img src ="http://www.cppblog.com/change/aggbug/185525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/change/" target="_blank">意洋</a> 2012-07-29 09:33 <a href="http://www.cppblog.com/change/archive/2012/07/29/185525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>