﻿<?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/keroro/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:08:01 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:08:01 GMT</pubDate><ttl>60</ttl><item><title>差分约束</title><link>http://www.cppblog.com/keroro/archive/2013/05/31/200711.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Fri, 31 May 2013 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2013/05/31/200711.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/200711.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2013/05/31/200711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/200711.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/200711.html</trackback:ping><description><![CDATA[<div>差分约束(difference constraints)，对，两个关键字要理解好，&#8220;difference&#8221;简单理解就是两个节点的&#8220;差&#8221;，对应的就是图中的边权，而&#8220;约束&#8221;对应的是图的边。这个图的边权不一定都是正数，之前我一直很奇怪为什么做最短路的时候初始化dis[]为了0也可以，那是因为我没意识到边权可以为负数，而思维定势地想初始化dis[]为0，那0不就是最小路径了吗，但这里差分约束的最短路径常常是负数的，所以最短路径可以不是0！！</div><div>看网上讲解的时候要小心，很多人把最长路和最短路是不分的，乱死了。</div><div>还有很重要的一点很多人没区分开，</div><div>&nbsp; &nbsp; 求最小可行解 ==&gt; 把不等式划为dv &gt;= dx + Z的形式，即建立&lt;u,v,Z&gt;边 ==&gt; 可行解要最小，其实就是取约束条件中`最大`的约束 ==&gt; 求最长路</div><div></div><div>&nbsp; &nbsp; 解释：为什么求最小可行解要划成dv &gt;= dx + Z形式？因为这个形式暗指了&#8220;让dv尽量小&#8221;，因为此刻dv的取值区间为[du+Z, &#8734;]。</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 为什么可行解最小，即意味着取最大约束条件？这样想，如果有dv &gt;= du + Z1, dv &gt;= du + Z2，(Z1&lt;Z2)，那dv的最小取值就是du+Z2，因为du+Z1不满足第二个约束条件。</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 最后一步就好理解了，因为建图的边权就是约束值，既然上一步指要取最大约束，那当然是求最长路啦。</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 网上很多讲解没有区分开所谓的最大/最小，一会儿指可行解的最，一会儿指约束条件的最，弄得我乱了好久。</div><div></div><div>&nbsp; 顺便贴一下：</div><div>&nbsp; &nbsp; 求最大可行解 ==&gt; 把不等式划为dv &lt;= dx + Z的形式，即建立&lt;u,v,Z&gt;边 ==&gt; 其实就是取约束条件中`最小`约束 ==&gt; 求最短路</div><div></div><div></div><div>&nbsp; &nbsp; 关于源点：很多时候额外价格源点可以帮我们把一个非连通图变成连通图，而对于源点的不等式，一定要和你之前建边时的不等式形式一样，如果之前是dv &gt;= du + Z，那源点也要dv &gt;= d0 + xxx。这个xxx就是dis[]的初始值，关于如何选取xxx，下面两句话摘自百度百科：</div><div>&nbsp; &nbsp; &#8220;</div><div>&nbsp; &nbsp; &nbsp;1.如果将源点到各点的距离初始化为0，最终求出的最短路满足 它们之间相互最接近了</div><div>&nbsp; &nbsp; &nbsp;2.如果将源点到各点的距离初始化为INF(无穷大)，其中之1为0，最终求出的最短路满足 它们与该点之间相互差值最大。</div><div>&nbsp; &nbsp; &#8221;</div><div></div><div>&nbsp; &nbsp; 差分约束题目我一般是用SPFA+栈，为什么不用dijkstra+heap？因为dijkstra不能处理负环，而我们的题目可能有负环，所以干脆都用SPFA了，多数条件下，用stack的SPFA比用queue的快，why？因为常常地，用最先更新了的点去更新其它点，效果比用以前已经更新了的点(在queue的tail)好。</div><div></div><div></div><div></div><div>差分约束专题：http://972169909-qq-com.iteye.com/blog/1185527</div><div></div><div></div><div></div><div>poj 1201 &nbsp;差分约束</div><div>题意：求符合题意的最小集合Z的元素个数，约束条件:i j C，表区间[i,j]至少有C个Z集合的元素。</div><div></div><div>隐含条件是，S区间是个连续的数字区间，0 &lt;= s[i+1] - s[i] &lt;= 1，其中s[i]表0~i中有多少数字是Z集合元素。下面是隐含条件的建边。</div><div>&nbsp; &nbsp; for(int i = 0; i &lt; 50001; i++) { &nbsp; &nbsp;//@</div><div>&nbsp; &nbsp; &nbsp; &nbsp; vert[i].push_back(i+1); edge[i].push_back(0);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; vert[i+1].push_back(i); edge[i+1].push_back(-1);</div><div></div><div>&nbsp; &nbsp; }</div><div></div><div>poj 1364 &nbsp;差分约束</div><div>题意：约束条件：i, n, op, K --&gt; op分greater和less，需要满足Si + S[i+1] + S[i+2] + ... + S[i+n] &gt; K （或小于）</div><div></div><div>因为我是用dis[i]表示S0+S1+...+Si的和，所以&lt;u,v,w&gt;应该表示的意思是sum[v]-sum[u-1] = w，所以这里0也是一个点，所以源点不能取0！</div><div>//@ ?? 我在SPFA后面输出了dis[]数组来看，这些值并不符合题目的要求，那为什么整个程序是对的？如果要输出一个解的话怎么写？</div><div>&nbsp; &nbsp; 答：因为这里的dis[i]表示的是s1+s2+...+si的和，用第一个样例来说，</div><div>&nbsp; &nbsp; sample input:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; 4 2</div><div>&nbsp; &nbsp; &nbsp; &nbsp; 1 2 gt 0</div><div>&nbsp; &nbsp; &nbsp; &nbsp; 2 2 lt 2</div><div>&nbsp; &nbsp; 输出的dis[0--n] : -1 0 0 0 0</div><div></div><div>&nbsp; &nbsp; s1+s2+s3 = sum[3] - sum[1-1] = dis[3] - dis[0] = 1 , 满足gt 0</div><div>&nbsp; &nbsp; s2+s3+s4 = sum[4] - sum[2-1] = dis[4] - dis[1] = 0 , 满足lt 2</div><div>&nbsp; &nbsp; 所以，{si}的一组解应该为0,1,0,0,0.</div><div></div><div>poj 1983 &nbsp; &nbsp;差分约束</div><div>题意：给出两种约束条件，一种是P A B X，意为精确地约束A比B远X个单位；另一种V A B，意为模糊地约束A至少比B远1个单位。是否有可行解？</div><div></div><div>好点：两种约束条件，其中Precise约束可以转换为X &lt;= A-B &lt;= X</div><div>&nbsp; &nbsp; &nbsp; 有V i i 这种数据，这种数据在SPFA里会WA，在ballman_ford里AC，不过预处理一下就可以了，还是用SPFA.</div><div></div><div>hdu 3666 &nbsp;差分约束</div><div>题意：给出矩阵{Cij}，问是否存在数列{A} 和 {B}，使得对于矩阵内所有Xij满足: L &lt;= Xij * Ai / Bj &lt;= U&nbsp;</div><div></div><div>构图。用log把乘除变成加减，就可以差分约束来做了。我用的是SPFA+stack求最短路，最长路应该也是可以的。没有建源点，直接一开&gt;始把所有点push进去... &nbsp;14xx ms 过挺险的~</div><div></div> <div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div><img src ="http://www.cppblog.com/keroro/aggbug/200711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2013-05-31 11:25 <a href="http://www.cppblog.com/keroro/archive/2013/05/31/200711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查分约束 poj 3159 </title><link>http://www.cppblog.com/keroro/archive/2013/05/28/200649.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Tue, 28 May 2013 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2013/05/28/200649.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/200649.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2013/05/28/200649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/200649.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/200649.html</trackback:ping><description><![CDATA[做第一道查分约束poj 3159...TLE不断。估计管理员是跟C++的STL过不去，就卡用vector的人了。。而我已经好久好久没人工写什么邻接表，前向星什么的了，就只能TLE过不了了。。换了什么dijkstra+优先队列，SPFA+stack优化，只要用vector来存边，估计都过不了。<br />下面是TLE代码，留纪念。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br />#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;vector&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #0000FF; ">int</span>&nbsp;dis[30001];<br /><span style="color: #0000FF; ">bool</span>&nbsp;visit[30001];<br /><span style="color: #0000FF; ">int</span>&nbsp;S[30001],&nbsp;S_top&nbsp;=&nbsp;0;<br />vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;vert[30001],&nbsp;edge[30001];<br /><span style="color: #0000FF; ">void</span>&nbsp;dijkstra(<span style="color: #0000FF; ">int</span>&nbsp;s);<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,v,w;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vert[u].push_back(v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edge[u].push_back(w);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;dijkstra(1);&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">最长路-----不是的，是最短路！</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;dis[n]);<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;dijkstra(<span style="color: #0000FF; ">int</span>&nbsp;s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(dis,&nbsp;127,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dis));<br />&nbsp;&nbsp;&nbsp;&nbsp;dis[s]&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;visit[s]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;S[++S_top]&nbsp;=&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(S_top&nbsp;&gt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;S[S_top--];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;Size&nbsp;=&nbsp;vert[u].size(),&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Size;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;vert[u][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dis[v]&nbsp;&gt;&nbsp;dis[u]&nbsp;+&nbsp;edge[u][i])&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[v]&nbsp;=&nbsp;dis[u]&nbsp;+&nbsp;edge[u][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(visit[v]&nbsp;==&nbsp;<span style="color: #0000FF; ">false</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S[++S_top]&nbsp;=&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />}</div><div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div><img src ="http://www.cppblog.com/keroro/aggbug/200649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2013-05-28 15:51 <a href="http://www.cppblog.com/keroro/archive/2013/05/28/200649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 2433</title><link>http://www.cppblog.com/keroro/archive/2013/05/27/200622.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Mon, 27 May 2013 09:56:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2013/05/27/200622.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/200622.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2013/05/27/200622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/200622.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/200622.html</trackback:ping><description><![CDATA[<div>/*</div><div>&nbsp; &nbsp; 最短路 &nbsp;好题</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; 题意：给出边建图，然后分别删除各条边，问每一次删边后的所有端点的两两最短路之和，若有一对端点不连通，则返回INF</div><div></div><div>&nbsp; &nbsp; 思路：暴力解法是每次删边后都来n次最短路。这里面的冗余就是删除的边并不影响一些点的最短路树，所以这些点可以不用在删边后都来次dijkstra&gt;。标程解法就是在暴力解法上加上一些剪枝。先预处理出所有点的最短路树，记x的最短路树的和为sum[x]。现在来去掉冗余：在预处理时用used[x][u][v]记录点x的最短路树是否用到了边u--v，则删除边u--v的时候，判断点x的最短路树是否用到边u--v的，若用到，则对x做一次dijkstra，用新的sum[x]表示&gt;当前最短路树；否则用预处理的sum[x]就可以，不用再dijkstra.</div><div></div><div>&nbsp; &nbsp; dijkstra是利用`边权为1`这一特性来加快的版本，具体看:http://www.cppblog.com/keroro/archive/2013/05/27/200621.html</div><div>&nbsp; &nbsp; 这道题有很多重边，这估计也是考点之一，不好好处理重边的话会超时。</div><div><br /><br /><div></div><div>&nbsp; &nbsp; 多数题解是错的，因为hdu上的这道题的数据比较水才可以过，可以试试discuss里给的数据，下面这几个题解比较靠谱。</div><div>&nbsp; &nbsp; http://blog.csdn.net/nash142857/article/details/8253913</div><div>&nbsp; &nbsp; http://www.cnblogs.com/crisxyj/archive/2013/03/10/2952396.html</div><div>&nbsp; &nbsp; http://hi.baidu.com/novosbirsk/item/bfcf0cd201edfc2d39f6f709</div><div>&nbsp; &nbsp; 两份代码的思想是完全一样的，只是&#8220;baidu blog&#8221;那份用w[i][e]来判断i的最短路树是否包括边e，而cnblog的那份是用used[x][u][v]来判断边u--&gt;v是否xxx.</div><div></div><div></div>*/</div><div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;algorithm&gt;<br />#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br />#include&nbsp;&lt;vector&gt;<br />#include&nbsp;&lt;deque&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAXN&nbsp;&nbsp;&nbsp;&nbsp;101<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99999999<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug&nbsp;&nbsp;&nbsp;printf("!\n")<br /><span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,v;&nbsp;}&nbsp;edge[3001];<br />vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;vertex[MAXN];<br /><span style="color: #0000FF; ">int</span>&nbsp;visit[MAXN],&nbsp;sum[MAXN],&nbsp;cnt[MAXN][MAXN];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">cnt[u][v]表u--v的边有多少条，用来处理重边</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">bool</span>&nbsp;used[MAXN][MAXN][MAXN];&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 style="color: #008000; ">//</span><span style="color: #008000; ">used[x][u][v]x的最短路树是否用到了边u--v</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;init();<br /><span style="color: #0000FF; ">void</span>&nbsp;dijkstra(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;when,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flag);<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;when&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m)&nbsp;!=&nbsp;EOF)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;u,&nbsp;&amp;v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vertex[u].push_back(v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vertex[v].push_back(u);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edge[i].u&nbsp;=&nbsp;u,&nbsp;edge[i].v&nbsp;=&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[u][v]++,&nbsp;cnt[v][u]++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dijkstra(i,&nbsp;++when,&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;sum[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmp&nbsp;=&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;edge[i].u,&nbsp;v&nbsp;=&nbsp;edge[i].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">forbid_u&nbsp;=&nbsp;edge[i].u,&nbsp;forbid_v&nbsp;=&nbsp;edge[i].v;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为有重边所以不能用这种方法</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;<span style="color: #0000FF; ">if</span>(used[j][u][v]&nbsp;&amp;&amp;&nbsp;cnt[u][v]&nbsp;==&nbsp;1)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">不加cnt[u][v]&nbsp;==&nbsp;1会超时。。卡的就是重边，靠！</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmp&nbsp;=&nbsp;sum[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[j]&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">vector&lt;int&gt;&nbsp;::&nbsp;iterator&nbsp;it1&nbsp;=&nbsp;find(vertex[u].begin(),&nbsp;vertex[u].end(),&nbsp;v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">vector&lt;int&gt;&nbsp;::&nbsp;iterator&nbsp;it2&nbsp;=&nbsp;find(vertex[v].begin(),&nbsp;vertex[v].end(),&nbsp;u);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">*it1&nbsp;=&nbsp;u,&nbsp;*it2&nbsp;=&nbsp;v;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[u][v]--,&nbsp;cnt[v][u]--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dijkstra(j,&nbsp;++when,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[u][v]++,&nbsp;cnt[v][u]++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">*it1&nbsp;=&nbsp;v,&nbsp;*it2&nbsp;=&nbsp;u;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">本来是用erase的，超时了。&nbsp;现在换这种方法也超时了，估计find耗时太久。</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;ans&nbsp;-&nbsp;tmp&nbsp;+&nbsp;sum[j];&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">用新的sum[j]来代替旧的tmp</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[j]&nbsp;=&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;n;&nbsp;k++)&nbsp;<span style="color: #0000FF; ">if</span>(visit[k]&nbsp;!=&nbsp;when)&nbsp;<span style="color: #0000FF; ">break</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">如果删边了以后j不能到达k(即k没有进过队)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(k&nbsp;&lt;=&nbsp;n)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;==&nbsp;INF&nbsp;?&nbsp;printf("INF\n")&nbsp;:&nbsp;printf("%d\n",&nbsp;ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;tmp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">不要把这个tmp和for_j里的tmp混了..</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;cnt[edge[i].u][edge[i].v]&nbsp;=&nbsp;cnt[edge[i].v][edge[i].u]&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">初始化<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />因为感觉memset(cnt)会不会花更多时间</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;dijkstra(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;when,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flag)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;floors&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cur&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;deque&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;Q[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;Q[cur].push_back(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;visit[s]&nbsp;=&nbsp;when;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(!Q[cur].empty())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;Q[cur].front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q[cur].pop_front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;Size&nbsp;=&nbsp;vertex[u].size(),&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Size;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;vertex[u][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(visit[v]&nbsp;!=&nbsp;when&nbsp;&amp;&amp;&nbsp;cnt[u][v]&nbsp;&gt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(flag&nbsp;==&nbsp;1)&nbsp;used[s][u][v]&nbsp;=&nbsp;used[s][v][u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">第一次最短路才标记used<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />因为懒得写两遍，所以要flag来标记是删边前还收删边后做的最短路，1则是预处理时的最短路，此时要标记used；2则是删边后的最短路，这个时候不能标记used.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;=&nbsp;when;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[s]&nbsp;+=&nbsp;floors;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q[1-cur].push_back(v);<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;floors++;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur&nbsp;=&nbsp;1&nbsp;-&nbsp;cur;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>(!Q[cur].empty());<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(sum,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(sum));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(used,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(used));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;vertex[i].clear();<br />}</div></div> <div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div><img src ="http://www.cppblog.com/keroro/aggbug/200622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2013-05-27 17:56 <a href="http://www.cppblog.com/keroro/archive/2013/05/27/200622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 2377 </title><link>http://www.cppblog.com/keroro/archive/2013/05/27/200621.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Mon, 27 May 2013 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2013/05/27/200621.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/200621.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2013/05/27/200621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/200621.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/200621.html</trackback:ping><description><![CDATA[<div>/*</div><div>&nbsp; &nbsp; 最短路, 终点集合到s的最远距离最短，求s. &nbsp; &nbsp;即已知终点集{d}求一s使得Min{ max{ dis(s, di) } }</div><div>&nbsp; &nbsp; 好题</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; 思路： &nbsp;多次单源最短路，选出最大值</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 在对每个x进行分层搜索的过程中, 用max_d[y]记录每个地区x到达地区y的最短距离中的最大值. 最后求得的Star Value就是max_d[]中的最小值.</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 由于题目的特殊性`边权都为1`，所以可以借助这一性质变换一下SPFA使其更快。</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 说个题外话，在临高时看到有个学弟拓扑排序用到&#8220;分层思想&#8221;，一直觉得很妙。就是拓扑后我们可以得到floor[i]，如果floor[i] &gt; floor[j]，即说明j是i的前驱节点（层数越小越接近root）; 而floor[i] == floor[j]的话则i，j的相对顺序无所谓，因为他们都在&#8220;同一层&#8221;。</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这里因为边权都为1，所以SPFA可以用到上述的分层思想，层数越高，离source越远。代码里面floors就表示层数，Q是滚动队列，就是一层一层地relax后继节点。</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 注意！！千万不要以为max_d[]是最短路算法里面的dis[]，这里的max_d[i]是到点i到终点集合{di}的最大值！而常规最短路算法里的dis[]已经被省略为&#8220;层数&#8221;了，不需要记录，所以没开数组。</div><div></div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 最重要的是学到一个tip！！以前我做多次最短路的时候总要每次都初始化visit[] -&gt; false，但其实不用的，我们只要用一个变量when表示&#8220;这是第几次做SPFA(或其他)&#8220;，然后每次入队前都看&#8221;是否当前visit[v] == when就可以直到改点是否已经入过队......</div><div>*/</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br />#include&nbsp;&lt;vector&gt;<br />#include&nbsp;&lt;deque&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug&nbsp;&nbsp;&nbsp;printf("!\n")<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;999999999<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAXN&nbsp;&nbsp;&nbsp;&nbsp;10000<br /><span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #0000FF; ">int</span>&nbsp;max_d[MAXN];<br /><span style="color: #0000FF; ">int</span>&nbsp;visit[MAXN];<br />vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;v[MAXN];<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;SPFA(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;when);<br /><span style="color: #0000FF; ">void</span>&nbsp;init();<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cases,&nbsp;query,&nbsp;id,&nbsp;m,&nbsp;y,&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;cases);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cases--)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;query);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;id,&nbsp;&amp;m);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(m--)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[id].push_back(y);<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;when&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(query--)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;m);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(m--)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPFA(x,&nbsp;++when);<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;INF,&nbsp;ans_id&nbsp;=&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;MAXN;&nbsp;i++)&nbsp;<span style="color: #0000FF; ">if</span>(!v[i].empty()&nbsp;&amp;&amp;&nbsp;max_d[i]&nbsp;&lt;&nbsp;ans)&nbsp;ans&nbsp;=&nbsp;max_d[i],&nbsp;ans_id&nbsp;=&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d\n",&nbsp;ans,&nbsp;ans_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;MAXN;&nbsp;i++)&nbsp;v[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(max_d,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(max_d));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;SPFA(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;when)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;deque&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;Q[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cur&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Q[cur].push_back(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;max_d[s]&nbsp;=&nbsp;max(max_d[s],&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;visit[s]&nbsp;=&nbsp;when;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;floors&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;floors++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(!Q[cur].empty())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;at&nbsp;=&nbsp;Q[cur].front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q[cur].pop_front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;Size&nbsp;=&nbsp;v[at].size(),&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Size;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;to&nbsp;=&nbsp;v[at][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(visit[to]&nbsp;!=&nbsp;when)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">是否已入队<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: #008000; ">//</span><span style="color: #008000; ">max_d[to]&nbsp;=&nbsp;max(max_d[to],&nbsp;max_d[at]+1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这句是不对的，因为这个分层跟拓扑排序的分层是不一样的，拓扑排序是要在入度为0时才能加进队Q，所以可以这样写，但是这里只要第一次遇见点to就必须得入队，因为要的是最短路径</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max_d[to]&nbsp;=&nbsp;max(max_d[to],&nbsp;floors);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">不把这句放在if外面，因为这里的max_d[to]是距离s的最短路径，最短路径也就是最小层数，最小层数在to第一次入队的时候已经得到了</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[to]&nbsp;=&nbsp;when;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q[1-cur].push_back(to);<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur&nbsp;=&nbsp;1&nbsp;-&nbsp;cur;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>(!Q[cur].empty());<br />}</div></div> <div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div><img src ="http://www.cppblog.com/keroro/aggbug/200621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2013-05-27 17:52 <a href="http://www.cppblog.com/keroro/archive/2013/05/27/200621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 2586</title><link>http://www.cppblog.com/keroro/archive/2013/05/17/200341.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Thu, 16 May 2013 18:44:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2013/05/17/200341.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/200341.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2013/05/17/200341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/200341.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/200341.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;最小公共祖先<br />&nbsp;&nbsp;&nbsp;&nbsp;题意:&nbsp;给出一颗无向有边权树,&nbsp;询问若干个(u,v)对的距离.<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;所谓LCA&nbsp;的Tarjan算法,&nbsp;实际上就是在建树的过程中把query中的lca给计算出来,&nbsp;所以称为`离线算法`&nbsp;.&nbsp;是的,&nbsp;本质就是这么简单,&nbsp;好多解释都搞复杂了.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;步骤略,&nbsp;自己google.<br />&nbsp;&nbsp;&nbsp;&nbsp;理解这个算法一定要抓住`递推`的思想(也有递归在里面,&nbsp;也要抓住).<br />&nbsp;&nbsp;&nbsp;&nbsp;Tarjan是利用并查集实现的,&nbsp;在递推过程中,&nbsp;一棵树的root节点代表这棵树(联系并查集来想),&nbsp;这样做的好处是,&nbsp;如果问点i与j的lca,&nbsp;我们只要找i,j都属于的最小的哪棵子树就行了,&nbsp;因为该子树就是我们的答案.&nbsp;那如何确定是那颗子树呢?&nbsp;这一点后面再解释一下.<br />&nbsp;&nbsp;&nbsp;&nbsp;下面说Tarjan最巧妙的点了.&nbsp;因为是在建树的过程中计算所有query,&nbsp;也就表示我们此刻是否能计算某一query对(u,v)的条件是&nbsp;:&nbsp;u和v是否都已经遍历过.&nbsp;所以我们可以在遍历到点v(假设经历v的时间比u晚)的时候把query给计算出来.&nbsp;比如lcm(u,v)就是find(u).&nbsp;那此刻的find(v)和lcm(u,v)相不相等呢?&nbsp;答案是不相等,&nbsp;至少在我的代码实现上不相等.&nbsp;因为father[x]的更新是在`递归回去`的时候更新的,&nbsp;而此刻在遍历v点,&nbsp;还没递归回去呢,&nbsp;father[v]当然也就没更新啦.<br />&nbsp;&nbsp;&nbsp;&nbsp;其实上一段就已经回答了`如何确定哪棵子树是我们想要的答案`这一问题了.&nbsp;就是find(u)所代表的子树!&nbsp;注意,&nbsp;是find(u),&nbsp;不是find(v)!&nbsp;因为u是在v之前已经被遍历过了,&nbsp;并且递归回去过sub_root过了,&nbsp;也就是father[u]被更新为sub_root了,&nbsp;所以find(u)可以代表当前的sub_tree,&nbsp;即`最小包含(u,v)子树`<br /><br />下面两个解释,&nbsp;推荐一下.&nbsp;罗嗦一句,&nbsp;看代码更容易理解,&nbsp;人脑模拟一遍更容易理解<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://www.nocow.cn/index.php/Tarjan%E7%AE%97%E6%B3%95</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://blog.chinaunix.net/uid-1721137-id-181005.html</span><span style="color: #008000; "><br /></span><span style="color: #008000; ">*/</span><br />#include&nbsp;&lt;vector&gt;<br />#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAXN&nbsp;&nbsp;&nbsp;&nbsp;40001<br /><span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug&nbsp;&nbsp;&nbsp;printf("!\n")<br />vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;v[MAXN],&nbsp;w[MAXN],&nbsp;query[MAXN],&nbsp;ans_num[MAXN];<br /><span style="color: #0000FF; ">int</span>&nbsp;father[MAXN],&nbsp;dis[MAXN],&nbsp;ans[201];<br /><span style="color: #0000FF; ">bool</span>&nbsp;visit[MAXN];<br /><span style="color: #0000FF; ">int</span>&nbsp;n;<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans_num[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father[i]&nbsp;=&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[i]&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[i]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;find(<span style="color: #0000FF; ">int</span>&nbsp;x)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;x&nbsp;==&nbsp;father[x]&nbsp;?&nbsp;x&nbsp;:&nbsp;father[x]&nbsp;=&nbsp;find(father[x]);&nbsp;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;Union(<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)&nbsp;{&nbsp;father[find(y)]&nbsp;=&nbsp;find(x);&nbsp;}<br /><span style="color: #0000FF; ">void</span>&nbsp;Tarjan(<span style="color: #0000FF; ">int</span>&nbsp;now,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;value)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;visit[now]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;dis[now]&nbsp;=&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;Size&nbsp;=&nbsp;v[now].size(),&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Size;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmp&nbsp;=&nbsp;v[now][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(visit[tmp]&nbsp;!=&nbsp;0)&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tarjan(tmp,&nbsp;value&nbsp;+&nbsp;w[now][i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Union(now,&nbsp;tmp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">注意顺序,&nbsp;先Tarjan子节点tmp,&nbsp;再更新其father[tmp],&nbsp;因为要保证在递推tmp所代表的子树时,&nbsp;father[tmp]&nbsp;=&nbsp;tmp,&nbsp;而与当前子树无关.&nbsp;递归回来的时候再把tmp代表的子树`并入`到当前树里</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;Size&nbsp;=&nbsp;query[now].size(),&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Size;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmp&nbsp;=&nbsp;query[now][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[tmp])&nbsp;<span style="color: #0000FF; ">continue</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">若visit[tmp]&nbsp;==&nbsp;true,&nbsp;即表示tmp节点已经遍历过,&nbsp;此时可计算相应的query</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[ans_num[now][i]]&nbsp;=&nbsp;dis[now]&nbsp;+&nbsp;dis[tmp]&nbsp;-&nbsp;2&nbsp;*&nbsp;dis[find(tmp)];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cases,&nbsp;Query,&nbsp;x,&nbsp;y,&nbsp;z;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;cases);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cases--)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;Query);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;x,&nbsp;&amp;y,&nbsp;&amp;z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[x].push_back(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[x].push_back(z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[y].push_back(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[y].push_back(z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Query;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;x,&nbsp;&amp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query[x].push_back(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query[y].push_back(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans_num[x].push_back(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans_num[y].push_back(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tarjan(1,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Query;&nbsp;i++)&nbsp;printf("%d\n",&nbsp;ans[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div> <div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div><img src ="http://www.cppblog.com/keroro/aggbug/200341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2013-05-17 02:44 <a href="http://www.cppblog.com/keroro/archive/2013/05/17/200341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么Scala对于一般函数严格要求指明参数类型的语言, 对于匿名函数却可以不用指明参数类型?</title><link>http://www.cppblog.com/keroro/archive/2013/04/04/199107.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Thu, 04 Apr 2013 14:28:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2013/04/04/199107.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/199107.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2013/04/04/199107.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/199107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/199107.html</trackback:ping><description><![CDATA[在coursera上上看了两周的Scala, 刚才奇怪为什么Scala对于一般函数严格要求指明参数类型的语言, 对于匿名函数却可以不用指明参数类型?
google无果. 不想查了. 习惯了Scheme/SML这样有类型推导系统的语言, 再来写Scala有点排斥心理, 而且Scala更过分的是要连函数的返回类型也要写...喂喂, 这都完全丧失了FP的美感了吧 >_<

突然想起来, 昨天才发现SML内置没有对大数的操作---好失望~

当初选这门课是好奇它能把面向对象与函数式能结合到多大程度, 现在看来没什么令人惊奇的, 不贬不赞.   还是原生函数式语言比较好玩.

如果你是被标题骗过来的, 能回答标题的问题就请给我讲讲吧~谢谢! <img src ="http://www.cppblog.com/keroro/aggbug/199107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2013-04-04 22:28 <a href="http://www.cppblog.com/keroro/archive/2013/04/04/199107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>与秦程QQ聊天，学到很多东西！</title><link>http://www.cppblog.com/keroro/archive/2012/06/10/178360.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Sun, 10 Jun 2012 14:52:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2012/06/10/178360.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/178360.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2012/06/10/178360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/178360.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/178360.html</trackback:ping><description><![CDATA[今天跟秦程QQ聊天，受到了些许启发。<br />秦，大学的他真的见识到了很多东西，学到很多东西，成长了好多！说实话，我羡慕了。<br />是的，我羡慕了，秦这一年的成长量。这是他自己争取来的！而我，做的远远不够！<br />觉得我的朋友们，都好了不起！大家都在成长，都在努力！有留级危险的鑫鑫，昨天被部长踢的丹妮，今天因为画坏了而抱怨的关业培，在跟我聊得秦程，还有还有，玉猪，宣卓，李璐雨。。。等等。让我想起了高中同桌猪魁，他曾经有段时间很努力！沈天弋，沈竹筠。。。鸣人，小李，四代火影。。。他们，都在，努力。<br />努力！<br /><br />
<div>
<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"><img id="Code_Closed_Image_224929" onclick="this.style.display='none'; Code_Closed_Text_224929.style.display='none'; Code_Open_Image_224929.style.display='inline'; Code_Open_Text_224929.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"><img style="display: none" id="Code_Open_Image_224929" onclick="this.style.display='none'; Code_Open_Text_224929.style.display='none'; Code_Closed_Image_224929.style.display='inline'; Code_Closed_Text_224929.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Code_Closed_Text_224929">聊天记录</span><span style="display: none" id="Code_Open_Text_224929"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">交谈中请勿轻信汇款、中奖信息、陌生电话，勿使用外挂软件。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">10</span><span style="color: #000000">:</span><span style="color: #000000">45</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />黑子的篮球漫画超级好看！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">48</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />。。。真心不想看漫画，宁愿等动画吧</span><span style="color: #000000">~~</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />看《康熙来了》，挺疯的</span><span style="color: #000000">~</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">12</span><span style="color: #000000">:</span><span style="color: #000000">31</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我觉得漫画好看多了，，而且我觉得动画没那么长。。。后面各种热血呀<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000">:</span><span style="color: #000000">05</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />动画有偷工减料之嫌。。。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />其实不是很喜欢黑子的篮球<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000">:</span><span style="color: #000000">48</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />还行吧，，漫画出了挺长了，非常好看，昨晚看了一百多卷。。。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我倒是很喜欢<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">14</span><span style="color: #000000">:</span><span style="color: #000000">22</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />好奢侈。。。你不觉得好看的漫画一下子看了一百多卷。。。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">14</span><span style="color: #000000">:</span><span style="color: #000000">31</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />呵呵<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />感觉就像我这个学期的缩影，这部漫画，充满尊严，挣扎，有种从地狱爬回来的感觉<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">15</span><span style="color: #000000">:</span><span style="color: #000000">49</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />哦</span><span style="color: #000000">~</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />一百多卷<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">16</span><span style="color: #000000">:</span><span style="color: #000000">38</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />热血，很爽<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />特别是打奇迹的世代最强的人那段，太爽了<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">17</span><span style="color: #000000">:</span><span style="color: #000000">51</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />现在看古龙的书，也挺热血。。。and漫画，为什么你会有这么的兴致一下子看这么长的漫画呀<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">18</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />因为就像看我自己呀<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">19</span><span style="color: #000000">:</span><span style="color: #000000">03</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />理解。看到自己的身影总是会很喜欢吧。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />黑子的动画是不是比漫画挫了？<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">20</span><span style="color: #000000">:</span><span style="color: #000000">04</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />还好。。。不过漫画很不错，动画也可以了，还原的很多了<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">20</span><span style="color: #000000">:</span><span style="color: #000000">55</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />是吗</span><span style="color: #000000">~</span><span style="color: #000000">感觉跟食梦者一样，热血是热血，但是进展太快。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />所以看起来有偷工减料的感觉。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">21</span><span style="color: #000000">:</span><span style="color: #000000">36</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我很理解当时那个人出现的识货的绝望，觉得自己即使尽所有的力量也无法打倒的感觉，这个时期，我真的遇到过很多这个人<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">23</span><span style="color: #000000">:</span><span style="color: #000000">30</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />遇到得越多，越知道自己的渺小，越会往强大的方向跑。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />所以你能遇到他们，真的是很幸运！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />不是每个人都有遇到强人的机会的。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">25</span><span style="color: #000000">:</span><span style="color: #000000">01</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />呵呵呵<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">26</span><span style="color: #000000">:</span><span style="color: #000000">39</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />其实我还知道另一个道理，就是我一个人是赢不了的<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">28</span><span style="color: #000000">:</span><span style="color: #000000">31</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我会好好体会着句话，&#8220;一个人是赢不了的&#8221;。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我这一年，似乎都是一个人做的，感觉很不好。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">30</span><span style="color: #000000">:</span><span style="color: #000000">01</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />其实之前就挺遗憾的，一年了，自己还没什么团队之类的东西。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">30</span><span style="color: #000000">:</span><span style="color: #000000">06</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我也是受一群人感染<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我第一次明白有种东西叫&#8220;热爱&#8221;，真的被震撼到了<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">31</span><span style="color: #000000">:</span><span style="color: #000000">07</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />热爱。。。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">32</span><span style="color: #000000">:</span><span style="color: #000000">22</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />他们告诉有的事无关胜负却事关尊严，这里面和黑子里面的很像<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">32</span><span style="color: #000000">:</span><span style="color: #000000">49</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />嗯。尊严最重要。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">33</span><span style="color: #000000">:</span><span style="color: #000000">52</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />第一次因为失败而落泪，也是第一次因为获胜而落泪，也是第一次觉得自己这么能哭<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">34</span><span style="color: #000000">:</span><span style="color: #000000">57</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />看不到，不过，加油！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">36</span><span style="color: #000000">:</span><span style="color: #000000">02</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />大学你见识了好多，成长了好多！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">36</span><span style="color: #000000">:</span><span style="color: #000000">25</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />不过是输的比较多而已<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">36</span><span style="color: #000000">:</span><span style="color: #000000">46</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />给了我一些启发。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">38</span><span style="color: #000000">:</span><span style="color: #000000">27</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />可没那么容易，，，，我也只能这么说了。。。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">38</span><span style="color: #000000">:</span><span style="color: #000000">49</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />嗯。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">41</span><span style="color: #000000">:</span><span style="color: #000000">32</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />要去获得尊重，这远比胜负重要<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">41</span><span style="color: #000000">:</span><span style="color: #000000">51</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />说实话，突然羡慕你这一年的成长量！为你高兴。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />这是你努力得来的。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">43</span><span style="color: #000000">:</span><span style="color: #000000">58</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />这是拿尊严换来的。。。不知道你能不能理解。。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">48</span><span style="color: #000000">:</span><span style="color: #000000">22</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />好吧，，，别多想<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />笨蛋侦探&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">49</span><span style="color: #000000">:</span><span style="color: #000000">10</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />我觉得，真的学到了东西。&nbsp;&nbsp;&nbsp;&nbsp;因为我没有你这种经历。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />秦程&nbsp;&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">:</span><span style="color: #000000">49</span><span style="color: #000000">:</span><span style="color: #000000">31</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />。。。你会明白的<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></span></div></div><img src ="http://www.cppblog.com/keroro/aggbug/178360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2012-06-10 22:52 <a href="http://www.cppblog.com/keroro/archive/2012/06/10/178360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有朋友真好</title><link>http://www.cppblog.com/keroro/archive/2012/03/17/168179.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Sat, 17 Mar 2012 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2012/03/17/168179.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/168179.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2012/03/17/168179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/168179.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/168179.html</trackback:ping><description><![CDATA[有朋友真好。<br />其实有时候只是想说说话，不是内心真的有疑问想寻求办法，因为答案其实就在自己心中，自己心里明白得很......但人就是这样，就算心里明白，也还是觉得憋，想找个人倾述。所以这时候，有朋友真好。朋友可以无偿地陪你，听你说话，跟你说话。<br />我今天其实也没发生什么，只是想了一些东西，心情就变得不太愉快，但并不是不愉快，只是很想有个人骂一下自己！骂自己的不成熟，骂自己没毅力，骂自己禁受不住挫折。然后我就找秦程聊天，聊着聊着，就释怀了，就开朗了。<br />有朋友真好。我没有好的文笔给解释这句话。<br />我对亲近的人都不轻易说谢谢，但今天我对秦程说了声谢谢，因为今天打电话的时候我想到blue 跟我说的一句话：有朋友真好。<img src ="http://www.cppblog.com/keroro/aggbug/168179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2012-03-17 11:37 <a href="http://www.cppblog.com/keroro/archive/2012/03/17/168179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近真的被打击了，要发奋了</title><link>http://www.cppblog.com/keroro/archive/2011/10/30/159347.html</link><dc:creator>笨蛋侦探</dc:creator><author>笨蛋侦探</author><pubDate>Sun, 30 Oct 2011 03:26:00 GMT</pubDate><guid>http://www.cppblog.com/keroro/archive/2011/10/30/159347.html</guid><wfw:comment>http://www.cppblog.com/keroro/comments/159347.html</wfw:comment><comments>http://www.cppblog.com/keroro/archive/2011/10/30/159347.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/keroro/comments/commentRss/159347.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keroro/services/trackbacks/159347.html</trackback:ping><description><![CDATA[<div>昨天ACM协会的学长们去南理工参加南理邀请赛，我和朱彦沛去打酱油了。<br />虽说是打酱油，但还是挺期待的。可是结果我们队（队名Run,就是我和彦沛两人）没Ac一道。。。有点失落。<br />再想起前段时间RQNOJ的月赛，只得了10分。<br />这段日子被打击了。<br />哎，我还远远不够呢。<br /><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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">反思</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />反思()<br /><img id="Codehighlighter1_18_690_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_690_Open_Text.style.display='none'; Codehighlighter1_18_690_Closed_Image.style.display='inline'; Codehighlighter1_18_690_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_18_690_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_18_690_Closed_Text.style.display='none'; Codehighlighter1_18_690_Open_Image.style.display='inline'; Codehighlighter1_18_690_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_18_690_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_18_690_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;keroro;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;case1:由于自己有noip基础，所以心里就有点骄傲感，我觉得这是我对待ACM心态不正的很大一个原因;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solution:摆正好心态。看人家大牛们，多谦虚多低调呀，我就一个小毛孩还有什么资格去装逼？！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不想被别人、被自己看不起的话就要低调点，努力学习！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;case2:心猿意马，什么都像学，linux,批处理,Java,C#,robot等等什么鬼东西都想学，可是又没有耐心去一个人<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好好学，导致什么都不精。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solution:先弄好ACM吧，linux也弄，反正现在linux上不了网，想玩也没来玩，所以主要放在ACM。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;case3:做题效率太低，缺少比赛经验。做题老是不喜欢自己弄数据调试，都是直接检查code，但这样很难发现<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些漏洞。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solution:学调试，开始学习弄测试数据。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;case4:没有复习，缺乏反思，以前做过的题拿到现在也不一定能A。这也是学习效率不高的很大的原因。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solution:要经常反思，经常复习，做完题要写上必要题解！<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;case5:没有钻研精神，即没有肥猫那种&#8220;一定要弄清楚&#8221;和&#8220;为什么这一定是最优解&#8221;的劲头。极度缺。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solution:静下心来，试着耐着性子去钻研一下深一点的东西！加强&#8220;打破砂锅问到底&#8221;的精神。<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">加油！王国真</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&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 /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br /><br />肥猫，我会超越你的！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><img src ="http://www.cppblog.com/keroro/aggbug/159347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keroro/" target="_blank">笨蛋侦探</a> 2011-10-30 11:26 <a href="http://www.cppblog.com/keroro/archive/2011/10/30/159347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>