﻿<?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++博客-wolf5x@bupt-随笔分类-acm_icpc</title><link>http://www.cppblog.com/wolf5x/category/6175.html</link><description>good luck &amp; have fun</description><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 16:51:09 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 16:51:09 GMT</pubDate><ttl>60</ttl><item><title>pku 3697 USTC campus network O(M)</title><link>http://www.cppblog.com/wolf5x/archive/2011/08/15/153390.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Sun, 14 Aug 2011 19:06:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2011/08/15/153390.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/153390.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2011/08/15/153390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/153390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/153390.html</trackback:ping><description><![CDATA[08合肥网赛某题。<br /><a href="http://poj.org/problem?id=3697">http://poj.org/problem?id=3697</a><br />题意是问在N个点的完全图(N&lt;=10,000)中删掉M(M&lt;=1,000,000)条边后, 还有多少个点与顶点1连通(顶点编号从1开始). <br />暴力BFS+HASH+各种WS优化的方法很多, 但是出题人原意应该是O(M)的做法吧... 下面是我YY出来的O(M)的做法.<br /><br />只考虑这M条待删边, 能得到什么信息呢? 可以先从点1入手. 扫一遍与1邻接的点, 那么剩下没被扫到的点肯定与1是连通的. 而被扫到的点是"有可能"与1不连通. 所以就把那些肯定与1连通的点做标记. 从这些确定连通的点中任选一个u, 再扫描它的所有邻接点. 这之后, 如果一个点一共被扫了2次, 那么它才"有可能"与1不连通, 其它少于2次的点肯定与1连通, 因为它或者与1连通, 或者与u连通, 而u是已知与1连通的. 这样再拿出一个已经确定连通的点, 扫描它的邻接点, 把被扫过次数&lt;3的又标记为已连通...... <br /><br />经过上面的YY, 算法基本上就出来了: <br />把已知肯定与1连通的点集称为S, 剩下不确定的为T. 一开始, S中只有1这一个点, 其它点都在T中. 每个点有个计数器, 记录自己被扫了多少次.<br />1) 从S中取出一个没处理过的点, 把它标记为已处理, 并遍历它的所有邻接点, 被遍历到的点的计数器都+1. <br />2) T中所有"计数&lt;S中已处理点个数"的, 都可以确定是连通的, 把它们从T中删除, 加入S中.<br />3) 重复1), 直到S中所有点都处理完.<br />这时, S中的点就是与1连通的, T中剩下的就是不连通的.<br /><br />复杂度分析:<br />读入边和扫描边都是O(M)的. <br />S集可以用队列维护, 总共O(N).<br />T集的维护: 每一轮都要扫一遍当前的T, 把所有计数小的删掉, 放进S中. 这样, 这一步的总复杂度就是O(sigma(T)), 会不会到达O(N^2)呢? 实际上是不会的. 因为一条边最多只会使一个顶点的计数+1, 因此每一轮还剩在T中的点数不会超过这一轮遍历过的边数. 这样, 所有回合的sigma(T)就肯定不会超过总边数. 因此这里总共也是O(M)的. 严格来说算上第1轮有N-1个点, 也是O(M+N).<br />这样总的复杂度就是O(M)了.<br /><br />不过这个算法读入用scanf时, g++跑了1000+ms, 改成getchar才到200+ms的. 不知道排前面的神们是不是有更NB的算法. <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-family: Courier; 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 />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;<br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">#include&nbsp;<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MAXN&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10010</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MAXM&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000010</span><span style="color: #000000">;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Edge&nbsp;{<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;next;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">}edg[MAXM</span><span style="color: #000000">*</span><span style="color: #000000">2</span><span style="color: #000000">];<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ecnt,&nbsp;gg[MAXN];<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;yes[MAXN];<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;que[MAXN],&nbsp;pq,&nbsp;sq,&nbsp;cnt[MAXN],&nbsp;vt[MAXN],&nbsp;nt;<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;N,&nbsp;M;<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">inline&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getnextint()<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">{<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;c;<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isdigit(c</span><span style="color: #000000">=</span><span style="color: #000000">getchar()));&nbsp;<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">{<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;r</span><span style="color: #000000">*</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;c</span><span style="color: #000000">-</span><span style="color: #000000">'</span><span style="color: #000000">0</span><span style="color: #000000">'</span><span style="color: #000000">;<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(isdigit(c</span><span style="color: #000000">=</span><span style="color: #000000">getchar()));<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;r;<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">inline&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addedge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v)<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">{<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;edg[ecnt].v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;v;&nbsp;edg[ecnt].next&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;gg[u],&nbsp;gg[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ecnt</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;edg[ecnt].v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;u;&nbsp;edg[ecnt].next&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;gg[v],&nbsp;gg[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ecnt</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">{<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cas&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">N,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">M)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">(N</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;M</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">)){<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ecnt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;N;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">){<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gg[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yes[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vt[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;N</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;M;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">){<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getnextint();<br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getnextint();<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(</span><span style="color: #000000">--</span><span style="color: #000000">u,&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">v);<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pq&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sq&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[sq</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yes[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(pq&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;sq)&nbsp;{<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;que[pq</span><span style="color: #000000">++</span><span style="color: #000000">];<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;gg[u];&nbsp;e&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;edg[e].next)&nbsp;{<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">yes[edg[e].v])<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[edg[e].v]</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;nt;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;nt&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;cnt[vt[i]]&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;pq)&nbsp;{<br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yes[vt[i]]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[sq</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vt[i];<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">nt)&nbsp;<br /></span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vt[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vt[nt];<br /></span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Case&nbsp;%d:&nbsp;%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">cas,&nbsp;sq</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">78</span>&nbsp;<span style="color: #000000">&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 /></span><span style="color: #008080">79</span>&nbsp;<span style="color: #000000">}</span></div> <img src ="http://www.cppblog.com/wolf5x/aggbug/153390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2011-08-15 03:06 <a href="http://www.cppblog.com/wolf5x/archive/2011/08/15/153390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有向有环图的最小路径覆盖</title><link>http://www.cppblog.com/wolf5x/archive/2011/07/19/151422.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Tue, 19 Jul 2011 14:42:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2011/07/19/151422.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/151422.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2011/07/19/151422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/151422.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/151422.html</trackback:ping><description><![CDATA[本文纯属YY……<br /><br />今天多校联合训练三的C题，<a title="http://acm.hdu.edu.cn/showproblem.php?pid=3861" href="http://acm.hdu.edu.cn/showproblem.php?pid=3861">http://acm.hdu.edu.cn/showproblem.php?pid=3861</a>，题意归结起来是在一个有向图中求最小路径覆盖，也就是用尽量少的链去覆盖整个图，每个顶点必须属于且只能属于一条链。但是题意并未说明原图无环。标程解法是强连通分量缩点，再求有向无环图的最小路径覆盖。反例是：1-&gt;2,2-&gt;3,4-&gt;5,5-&gt;6,2-&gt;5,5-&gt;2。正解是2，123一组，456一组。<br /><br />因为是要求路径数最小，所以YY了一个上下界最小流的做法。构图是将原来的点A0拆成两个，A和A'。从A到A'连一条边，下界和上界都为1。所有原来A0的出边，都从A'出去，下界0，上界1.所有原来A0的入边，都指向A。新建一个源点S，一个汇点T。从S到每个点A连一条边，下界0，上界1。从每个A'到T连一条边，下界0，上界1。<br /><br />对这个新图求最小流，即为原题所求。<br /><br />YY的证明：<br />A-&gt;A'，限制了这个点必须经过一次。这条边上的流量有两个来源：其它的点B'，或者源点S，前者说明A和B在同一条链中，B是A的前驱，后者说明A是链的起点。同样，这个流量有两个去处：其它的点C'，或者汇点T，前者说明A和C在同一条链中，C是A的后继，后者说明A是链的终点。<br /><br />到达汇的每1单位流量，意味着一条链的终结。所以最小流就能让链数最少。<br /><br />YY完毕，欢迎开炮……<br /><br /><br /><b>ps. 理论上说，以上方法肯定是错的。要不然求Hamiltion通路就不是NP了＠。＠</b><br /><img src ="http://www.cppblog.com/wolf5x/aggbug/151422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2011-07-19 22:42 <a href="http://www.cppblog.com/wolf5x/archive/2011/07/19/151422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 3311 steiner tree / 状态压缩spfa</title><link>http://www.cppblog.com/wolf5x/archive/2010/05/27/116475.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Thu, 27 May 2010 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2010/05/27/116475.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/116475.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2010/05/27/116475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/116475.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/116475.html</trackback:ping><description><![CDATA[
		<a href="http://acm.hdu.edu.cn/showproblem.php?pid=3311">http://acm.hdu.edu.cn/showproblem.php?pid=3311</a>
		<br />
		<br />给定6个基础点，和1000个辅助点，以及无向边若干。<br />求一棵代价最小的生成子树，使得6个基础点连通。<br />http://en.wikipedia.org/wiki/Steiner_tree_problem<br /><br />方法一：<br />状态DP。<br />一棵树，实际上可以看成是由两棵子树拼接而成，或者一棵树扩展一条边筛选。而要完整地表示一棵子树，需要记录它的根，和对6个基础点的覆盖状态。<br />这样求一棵大树，可以枚举接合点，以及两个子树的覆盖状态。<br />若dp[i][j]，i表示接合点，j表示覆盖状态，那么dp[i][j]=min{dp[i][k]+dp[i][j^k]}。<br />直接扩展一条边, 可以在保持j不变的情况下, 优先队列广搜, 大大降低复杂度.<br /><br />方法二：<br />spfa。<br />dp[i][j]意义同上。一个点(i,j)，对每个邻接点i'，枚举那一头的状态j'，然后用dp[i][j]+dp[i'][j']+way[i][i']去更新dp[i][j|j']和dp[i'][j|j']。<br /><br />ps. topcoder srm 470 div1 level3是此题升级版.<br /><br style="font-family: courier new;" /><div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%; font-family: courier new;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);">  1</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  2</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">vector</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  3</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">list</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  4</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">map</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  5</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">queue</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  6</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">stack</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  7</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  8</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">iostream</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  9</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">sstream</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 10</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">numeric</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 11</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">algorithm</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 12</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cmath</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 13</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cctype</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 14</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cstdlib</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 15</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cstdio</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 16</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cstring</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 17</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">namespace</span><span style="color: rgb(0, 0, 0);"> std;<br /></span><span style="color: rgb(0, 128, 128);"> 18</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 19</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> CLR(x) memset((x),0,sizeof(x))</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 20</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> SET(x,y) memset((x),(y),sizeof(x))</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 21</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> REP(i,x) for(int i=0;i&lt;(x);i++)</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 22</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> FOR(i,x,y) for(int i=(x);i&lt;(y);i++)</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 23</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> VI vector&lt;int&gt; </span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 24</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> PB(i,x) (i).push_back(x)</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 25</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> MP(x,y) make_pair((x),(y))</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 26</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 27</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">struct</span><span style="color: rgb(0, 0, 0);"> EDGE{<br /></span><span style="color: rgb(0, 128, 128);"> 28</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> v,e,d;<br /></span><span style="color: rgb(0, 128, 128);"> 29</span> <span style="color: rgb(0, 0, 0);">}edg[</span><span style="color: rgb(0, 0, 0);">20000</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 30</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> ecnt, gg[</span><span style="color: rgb(0, 0, 0);">1006</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 31</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 32</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">struct</span><span style="color: rgb(0, 0, 0);"> HEAP{<br /></span><span style="color: rgb(0, 128, 128);"> 33</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> v,d;<br /></span><span style="color: rgb(0, 128, 128);"> 34</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> nv, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> nd){v</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">nv;d</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">nd;}<br /></span><span style="color: rgb(0, 128, 128);"> 35</span> <span style="color: rgb(0, 0, 0);">}hp[</span><span style="color: rgb(0, 0, 0);">1006</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">6</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 36</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> sz;<br /></span><span style="color: rgb(0, 128, 128);"> 37</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">bool</span><span style="color: rgb(0, 0, 0);"> vis[</span><span style="color: rgb(0, 0, 0);">1006</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 38</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 39</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> dp[</span><span style="color: rgb(0, 0, 0);">1006</span><span style="color: rgb(0, 0, 0);">][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">6</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 40</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> N, M, P;<br /></span><span style="color: rgb(0, 128, 128);"> 41</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 42</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">bool</span><span style="color: rgb(0, 0, 0);"> cmp(</span><span style="color: rgb(0, 0, 255);">const</span><span style="color: rgb(0, 0, 0);"> HEAP </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">a, </span><span style="color: rgb(0, 0, 255);">const</span><span style="color: rgb(0, 0, 0);"> HEAP </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">b)<br /></span><span style="color: rgb(0, 128, 128);"> 43</span> <span style="color: rgb(0, 0, 0);">{ </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> a.d</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">b.d; }<br /></span><span style="color: rgb(0, 128, 128);"> 44</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 45</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> addedge(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> u, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> v, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> d)<br /></span><span style="color: rgb(0, 128, 128);"> 46</span> <span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 47</span> <span style="color: rgb(0, 0, 0);">    edg[ecnt].v</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">v; edg[ecnt].d</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">d; edg[ecnt].e</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">gg[u]; gg[u]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">ecnt</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 48</span> <span style="color: rgb(0, 0, 0);">    edg[ecnt].v</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">u; edg[ecnt].d</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">d; edg[ecnt].e</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">gg[v]; gg[v]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">ecnt</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 49</span> <span style="color: rgb(0, 0, 0);">}<br /></span><span style="color: rgb(0, 128, 128);"> 50</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 51</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> steiner()<br /></span><span style="color: rgb(0, 128, 128);"> 52</span> <span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 53</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> up </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">(N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);"> 54</span> <span style="color: rgb(0, 0, 0);">    SET(dp,</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);"> 55</span> <span style="color: rgb(0, 0, 0);">    REP(i,N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">) dp[i][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">i]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 56</span> <span style="color: rgb(0, 0, 0);">    FOR(i,N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">M</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">) dp[i][</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 57</span> <span style="color: rgb(0, 0, 0);">    REP(i,up){<br /></span><span style="color: rgb(0, 128, 128);"> 58</span> <span style="color: rgb(0, 0, 0);">        REP(j,N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">M</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);"> 59</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> k</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i; k</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; k</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">(k</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">i){<br /></span><span style="color: rgb(0, 128, 128);"> 60</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(dp[j][k]</span><span style="color: rgb(0, 0, 0);">!=-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);"> dp[j][i</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">k]</span><span style="color: rgb(0, 0, 0);">!=-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br /></span><span style="color: rgb(0, 128, 128);"> 61</span> <span style="color: rgb(0, 0, 0);">                    </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(dp[j][i]</span><span style="color: rgb(0, 0, 0);">==-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);"> dp[j][i]</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">dp[j][k]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">dp[j][i</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">k])<br /></span><span style="color: rgb(0, 128, 128);"> 62</span> <span style="color: rgb(0, 0, 0);">                        dp[j][i]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">dp[j][k]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">dp[j][i</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">k];<br /></span><span style="color: rgb(0, 128, 128);"> 63</span> <span style="color: rgb(0, 0, 0);">            }<br /></span><span style="color: rgb(0, 128, 128);"> 64</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);"> 65</span> <span style="color: rgb(0, 0, 0);">        sz</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 66</span> <span style="color: rgb(0, 0, 0);">        CLR(vis);<br /></span><span style="color: rgb(0, 128, 128);"> 67</span> <span style="color: rgb(0, 0, 0);">        REP(j,N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">M</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(dp[j][i]</span><span style="color: rgb(0, 0, 0);">!=-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);"> 68</span> <span style="color: rgb(0, 0, 0);">            hp[sz</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">].</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">(j,dp[j][i]);<br /></span><span style="color: rgb(0, 128, 128);"> 69</span> <span style="color: rgb(0, 0, 0);">            push_heap(hp, hp</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">sz, cmp);<br /></span><span style="color: rgb(0, 128, 128);"> 70</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);"> 71</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(sz){<br /></span><span style="color: rgb(0, 128, 128);"> 72</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> now</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">hp[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">].v;<br /></span><span style="color: rgb(0, 128, 128);"> 73</span> <span style="color: rgb(0, 0, 0);">            pop_heap(hp, hp</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">sz</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">,cmp);<br /></span><span style="color: rgb(0, 128, 128);"> 74</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(vis[now])</span><span style="color: rgb(0, 0, 255);">continue</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 75</span> <span style="color: rgb(0, 0, 0);">            vis[now]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 76</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> e</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">gg[now]; </span><span style="color: rgb(0, 0, 0);">~</span><span style="color: rgb(0, 0, 0);">e; e</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">edg[e].e){<br /></span><span style="color: rgb(0, 128, 128);"> 77</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> to</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">edg[e].v, td</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">dp[now][i]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">edg[e].d;<br /></span><span style="color: rgb(0, 128, 128);"> 78</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(dp[to][i]</span><span style="color: rgb(0, 0, 0);">==-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);"> dp[to][i]</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">td){<br /></span><span style="color: rgb(0, 128, 128);"> 79</span> <span style="color: rgb(0, 0, 0);">                    dp[to][i]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">td;<br /></span><span style="color: rgb(0, 128, 128);"> 80</span> <span style="color: rgb(0, 0, 0);">                    hp[sz</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">].</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">(to,td);<br /></span><span style="color: rgb(0, 128, 128);"> 81</span> <span style="color: rgb(0, 0, 0);">                    push_heap(hp, hp</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">sz, cmp);<br /></span><span style="color: rgb(0, 128, 128);"> 82</span> <span style="color: rgb(0, 0, 0);">                }<br /></span><span style="color: rgb(0, 128, 128);"> 83</span> <span style="color: rgb(0, 0, 0);">            }<br /></span><span style="color: rgb(0, 128, 128);"> 84</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);"> 85</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);"> 86</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> dp[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">][up</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 87</span> <span style="color: rgb(0, 0, 0);">}<br /></span><span style="color: rgb(0, 128, 128);"> 88</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 89</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> main()<br /></span><span style="color: rgb(0, 128, 128);"> 90</span> <span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 91</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">~</span><span style="color: rgb(0, 0, 0);">scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d %d %d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">N, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">M, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">P)){<br /></span><span style="color: rgb(0, 128, 128);"> 92</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> u, v, d;<br /></span><span style="color: rgb(0, 128, 128);"> 93</span> <span style="color: rgb(0, 0, 0);">        SET(gg,</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">); ecnt</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 94</span> <span style="color: rgb(0, 0, 0);">        REP(i,N</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">M){<br /></span><span style="color: rgb(0, 128, 128);"> 95</span> <span style="color: rgb(0, 0, 0);">            scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">d);<br /></span><span style="color: rgb(0, 128, 128);"> 96</span> <span style="color: rgb(0, 0, 0);">            addedge(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">, d);<br /></span><span style="color: rgb(0, 128, 128);"> 97</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);"> 98</span> <span style="color: rgb(0, 0, 0);">        REP(i,P){<br /></span><span style="color: rgb(0, 128, 128);"> 99</span> <span style="color: rgb(0, 0, 0);">            scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d %d %d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">u, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">v, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">d);<br /></span><span style="color: rgb(0, 128, 128);">100</span> <span style="color: rgb(0, 0, 0);">            addedge(u,v,d);<br /></span><span style="color: rgb(0, 128, 128);">101</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);">102</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> ret</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">steiner();<br /></span><span style="color: rgb(0, 128, 128);">103</span> <span style="color: rgb(0, 0, 0);">        printf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d\n</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, ret);<br /></span><span style="color: rgb(0, 128, 128);">104</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">105</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">106</span> <span style="color: rgb(0, 0, 0);">}</span></div><br /><img src ="http://www.cppblog.com/wolf5x/aggbug/116475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2010-05-27 16:21 <a href="http://www.cppblog.com/wolf5x/archive/2010/05/27/116475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Two Professors (CERC 2008) 解题报告</title><link>http://www.cppblog.com/wolf5x/archive/2009/12/24/103933.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Thu, 24 Dec 2009 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/12/24/103933.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/103933.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/12/24/103933.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/103933.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/103933.html</trackback:ping><description><![CDATA[Two Professors<br>CERC 2008<br><br>题目大意:给n条线段,要求划分成尽可能少的子集,使得在同一个子集中的线段两两不重叠.<br>同时限定线段1和线段2不能在同一子集中.<br><br>记每条线段为[Li,Ri], 每个子集的最右端为Bi. <br>记线段1和2中,L较小的那个为X,另一个为Y.<br><br>如果没有那个限定,容易想到贪心的方法:将所有线段按L从小到大排序.然后依次处理线段k,如果当前存在某个集合的Bi&lt;=Lk,就将Lk加入此集合中,并更新Bi=Rk.否则新开一个集合放入k.模拟这个过程,最后的集合数就是答案.用堆维护已有集合的信息,时间复杂度是O(nlgn).<br><br>有了限制条件后,原方法不适用了,因为在X与Y之间处理的线段,对Y有后效性.这会使得单纯按照刚才的方法随意贪心,可能轮到Y时,只有X所在集合的Bi&lt;=LY,迫使必须开新集合.但实际上,有可能可以通过调整X与Y之间的线段排列结构,使Y避开X.<br>问题关键就是如何判断能否调整(并不用关心详细的调整步骤).<br>当一条线段(P)面临多个可插入的集合时,之前的方法是随意选一个,而不合适的决策正在此产生.下面构造一个情景:<br>假设P可以在两个集合s,t中选择,而X在s中.<br>现在P选择加入t.<br>接下来按部就班地处理.<br>轮到Y选时,它只能选择加入s,或者开新的集合.<br>这时候,我们能得知,如果当初P选择的是s,紧随其后的其它选择也相应地对调,那么Y此时肯定面临的是只能加入t,或者开新的集合.<br>这样Y当然直接加入t就行了.<br>这说明,只要存在一个这样的P,当Y遭遇X时,肯定存在形状对称的另一个局面使Y避开X,而P就是关键先生.<br><br>所以只需稍微改造之前的算法,在处理X与Y之间的线段时,判断并记录下是否出现过可选局面.这样就能正确处理Y遭遇X的情形了.<br>其它情形时策略不变(可以证明这样的解是最优的).<br><br>代码略...<br><br> <img src ="http://www.cppblog.com/wolf5x/aggbug/103933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-12-24 14:34 <a href="http://www.cppblog.com/wolf5x/archive/2009/12/24/103933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Guarders: Maximal Cliques on Circular-arc Graph</title><link>http://www.cppblog.com/wolf5x/archive/2009/09/07/95456.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 07 Sep 2009 05:23:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/09/07/95456.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/95456.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/09/07/95456.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/95456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/95456.html</trackback:ping><description><![CDATA[Maximal Cliques on Circular-arc Graph<br>合肥2008现场赛, 2009网赛 Guarders<br>In graph theory, a circular-arc graph is the intersection graph of a set of arcs on the circle. --wiki<br><br>uestc_floyd的做法是搜+剪枝.<br><br>zzh@bupt大牛想出二分图匹配的做法:<br>固定某个区间Li肯定选中, 则剩下的区间里, 可能被选择的只有与Li有交集的那些.<br>(*)将那些区间分两类: 与Li的左边界交的, 与Li的右边界交的. <br>易知与Li两边界都交的是肯定可以选的, 不会产生不合要求的局面.<br>不合要求的情况只可能是, 某个一类区间和某个二类区间没有交, 却同时选了它们.<br>所以二分图建图方法为, 若某个一类区间和某个二类区间没有交, 则连一条边.<br>二分图的顶点数+1-最大匹配数即为Li对应的最优解.<br>枚举每个Li.<br>理论时间复杂度相当高, O(n)*O(匹配), 实现上可以加入排序, 最优解剪枝等方案.<br><br>ps. (*)非常巧妙的想法! 非常艺术!<br><br><br><img src ="http://www.cppblog.com/wolf5x/aggbug/95456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-09-07 13:23 <a href="http://www.cppblog.com/wolf5x/archive/2009/09/07/95456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2114 Boatherds (树的分治)</title><link>http://www.cppblog.com/wolf5x/archive/2009/07/31/91806.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Fri, 31 Jul 2009 06:30:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/07/31/91806.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/91806.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/07/31/91806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/91806.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/91806.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 题目给出一棵树(N&lt;=10000)以及所有边的权(&lt;=10000). 现在要求对任意查询Q(&lt;=10^8),&nbsp;判断是否存在一条边权之和恰好为Q的路径.标程的方法暂时没看懂= =...&nbsp;我用树的分治做(更多相关内容见09国家集训队漆子超的论文)考虑一棵以root为根的子树, 那么在这棵子树中, 有多少条 v1-&gt;root-&gt;v2 的路径长恰好为Q呢?...&nbsp;&nbsp;<a href='http://www.cppblog.com/wolf5x/archive/2009/07/31/91806.html'>阅读全文</a><img src ="http://www.cppblog.com/wolf5x/aggbug/91806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-07-31 14:30 <a href="http://www.cppblog.com/wolf5x/archive/2009/07/31/91806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3450 Corporate Identity  (后缀数组,KMP扩展,自动机)</title><link>http://www.cppblog.com/wolf5x/archive/2009/07/31/91801.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Fri, 31 Jul 2009 05:46:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/07/31/91801.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/91801.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/07/31/91801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/91801.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/91801.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: courier new">后缀数组,KMP扩展,自动机<br>题目要求4000个长度为200的字串的最长公共子串.<br>只需选一个串作为基串, 枚举它的所有后缀串S[i..len], 求出其它串与这个子串的LCP. 最后选最大的输出.<br>关于求串S与串T所有后缀的LCP, 林希德的论文讲了扩展KMP算法. 不过我想出另一种方法:<br>把S和T直接连接得到新串U. 按正常KMP的方法求U的next数组, 不过当p指向U[len[S]+1]即原T串的首字母时, 直接将此位的next置为0. <br>最后min(len[S], next[k]) 就是串T[1..(k-len[S])]与串S的lcp长度.<br><br>代码如下:<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;wd[</span><span style="COLOR: #000000">4000</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cnt[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">],&nbsp;vis[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ss[</span><span style="COLOR: #000000">401</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;next[</span><span style="COLOR: #000000">401</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;N;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;readin()<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_147_257_Open_Image onclick="this.style.display='none'; Codehighlighter1_147_257_Open_Text.style.display='none'; Codehighlighter1_147_257_Closed_Image.style.display='inline'; Codehighlighter1_147_257_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_147_257_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_147_257_Closed_Text.style.display='none'; Codehighlighter1_147_257_Open_Image.style.display='inline'; Codehighlighter1_147_257_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_147_257_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_147_257_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N);<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(N</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">N;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,wd[i]);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;mycmp(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l1,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l2)<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id=Codehighlighter1_306_395_Open_Image onclick="this.style.display='none'; Codehighlighter1_306_395_Open_Text.style.display='none'; Codehighlighter1_306_395_Closed_Image.style.display='inline'; Codehighlighter1_306_395_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_306_395_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_306_395_Closed_Text.style.display='none'; Codehighlighter1_306_395_Open_Image.style.display='inline'; Codehighlighter1_306_395_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_306_395_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_306_395_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(l1</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">l2)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(l2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">l1);<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">l1&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s1</span><span style="COLOR: #000000">==*</span><span style="COLOR: #000000">s2)&nbsp;s1</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">,&nbsp;s2</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s1</span><span style="COLOR: #000000">-*</span><span style="COLOR: #000000">s2);<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;mycpy(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s1,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l)<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_436_477_Open_Image onclick="this.style.display='none'; Codehighlighter1_436_477_Open_Text.style.display='none'; Codehighlighter1_436_477_Closed_Image.style.display='inline'; Codehighlighter1_436_477_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_436_477_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_436_477_Closed_Text.style.display='none'; Codehighlighter1_436_477_Open_Image.style.display='inline'; Codehighlighter1_436_477_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_436_477_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_436_477_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(l</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(s1</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(s2</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;solve()<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_493_1378_Open_Image onclick="this.style.display='none'; Codehighlighter1_493_1378_Open_Text.style.display='none'; Codehighlighter1_493_1378_Closed_Image.style.display='inline'; Codehighlighter1_493_1378_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_493_1378_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_493_1378_Closed_Text.style.display='none'; Codehighlighter1_493_1378_Open_Image.style.display='inline'; Codehighlighter1_493_1378_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_493_1378_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_493_1378_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;memset(cnt,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(cnt));<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">strlen(wd[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;strcpy(ss,wd[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ans[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img id=Codehighlighter1_648_1308_Open_Image onclick="this.style.display='none'; Codehighlighter1_648_1308_Open_Text.style.display='none'; Codehighlighter1_648_1308_Closed_Image.style.display='inline'; Codehighlighter1_648_1308_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_648_1308_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_648_1308_Closed_Text.style.display='none'; Codehighlighter1_648_1308_Open_Image.style.display='inline'; Codehighlighter1_648_1308_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;p</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">l0;&nbsp;p</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_648_1308_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_648_1308_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">ss[p];<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img id=Codehighlighter1_696_1137_Open_Image onclick="this.style.display='none'; Codehighlighter1_696_1137_Open_Text.style.display='none'; Codehighlighter1_696_1137_Closed_Image.style.display='inline'; Codehighlighter1_696_1137_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_696_1137_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_696_1137_Closed_Text.style.display='none'; Codehighlighter1_696_1137_Open_Image.style.display='inline'; Codehighlighter1_696_1137_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">N;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_696_1137_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_696_1137_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ss[l0],&nbsp;wd[i]);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">连接两个串</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">l0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">strlen(wd[i]);<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;p0</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;p1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img id=Codehighlighter1_828_1131_Open_Image onclick="this.style.display='none'; Codehighlighter1_828_1131_Open_Text.style.display='none'; Codehighlighter1_828_1131_Closed_Image.style.display='inline'; Codehighlighter1_828_1131_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_828_1131_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_828_1131_Closed_Text.style.display='none'; Codehighlighter1_828_1131_Open_Image.style.display='inline'; Codehighlighter1_828_1131_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(p1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">l1)</span><span id=Codehighlighter1_828_1131_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_828_1131_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(p0</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;s[p0]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">s[p1])<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">next[p0];<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">p1]</span><span style="COLOR: #000000">=++</span><span style="COLOR: #000000">p0;<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(p1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">l0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此位置0</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">54</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[p1]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;p0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img id=Codehighlighter1_991_1123_Open_Image onclick="this.style.display='none'; Codehighlighter1_991_1123_Open_Text.style.display='none'; Codehighlighter1_991_1123_Closed_Image.style.display='inline'; Codehighlighter1_991_1123_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_991_1123_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_991_1123_Closed_Text.style.display='none'; Codehighlighter1_991_1123_Open_Image.style.display='inline'; Codehighlighter1_991_1123_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(p1</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">l0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p)</span><span id=Codehighlighter1_991_1123_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_991_1123_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">min(l0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p,&nbsp;next[p1]);<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(vis[p][p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">i)<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[p][p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i,&nbsp;cnt[p][p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img id=Codehighlighter1_1174_1304_Open_Image onclick="this.style.display='none'; Codehighlighter1_1174_1304_Open_Text.style.display='none'; Codehighlighter1_1174_1304_Closed_Image.style.display='inline'; Codehighlighter1_1174_1304_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1174_1304_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1174_1304_Closed_Text.style.display='none'; Codehighlighter1_1174_1304_Open_Image.style.display='inline'; Codehighlighter1_1174_1304_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">l0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">p;&nbsp;j</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1174_1304_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1174_1304_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img id=Codehighlighter1_1200_1298_Open_Image onclick="this.style.display='none'; Codehighlighter1_1200_1298_Open_Text.style.display='none'; Codehighlighter1_1200_1298_Closed_Image.style.display='inline'; Codehighlighter1_1200_1298_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1200_1298_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1200_1298_Closed_Text.style.display='none'; Codehighlighter1_1200_1298_Open_Image.style.display='inline'; Codehighlighter1_1200_1298_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cnt[p][j]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">N</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1200_1298_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1200_1298_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(mycmp(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ss[p],&nbsp;j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;ans,&nbsp;strlen(ans))</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mycpy(ans,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ss[p],&nbsp;j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ans[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">IDENTITY&nbsp;LOST</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;puts(ans);<br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img id=Codehighlighter1_1392_1430_Open_Image onclick="this.style.display='none'; Codehighlighter1_1392_1430_Open_Text.style.display='none'; Codehighlighter1_1392_1430_Closed_Image.style.display='inline'; Codehighlighter1_1392_1430_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1392_1430_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1392_1430_Closed_Text.style.display='none'; Codehighlighter1_1392_1430_Open_Image.style.display='inline'; Codehighlighter1_1392_1430_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1392_1430_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1392_1430_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img id=Codehighlighter1_1411_1428_Open_Image onclick="this.style.display='none'; Codehighlighter1_1411_1428_Open_Text.style.display='none'; Codehighlighter1_1411_1428_Closed_Image.style.display='inline'; Codehighlighter1_1411_1428_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1411_1428_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1411_1428_Closed_Text.style.display='none'; Codehighlighter1_1411_1428_Open_Image.style.display='inline'; Codehighlighter1_1411_1428_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(readin())</span><span id=Codehighlighter1_1411_1428_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1411_1428_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;solve();<br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">82</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">83</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br><br></span>
<img src ="http://www.cppblog.com/wolf5x/aggbug/91801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-07-31 13:46 <a href="http://www.cppblog.com/wolf5x/archive/2009/07/31/91801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几道线性的题目</title><link>http://www.cppblog.com/wolf5x/archive/2009/07/16/90275.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Thu, 16 Jul 2009 12:12:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/07/16/90275.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/90275.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/07/16/90275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/90275.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/90275.html</trackback:ping><description><![CDATA[几道线性的题目<br><br>Tanks a Lot<br>题意:<br>一个圆,周长为整数n(n&lt;=10^7).圆周上有k(k&lt;=n)个加油站,每个加油站有整数的油量w[i],所有加油站总油量恰好为n. 行车单位路程耗油量为1, 车的初始油量为0. 问,以哪些加油站为起点可以走完一周? 分别判断顺时针和逆时针的情况.<br>解:<br>栈的应用.<br>考虑单个点v1,沿路径v1,v2,v3,...走,则从v1能完成一周的充要条件是对任意的k,S[1,k-1]-C[1,k]&gt;=0,其中S[1,k-1]为这段路上总加油量,C[1,k]为总耗油量.<br>再考虑先后2个点vk1,vk2. 设沿路径vk1,vp1,vp2,...,vk2,...vpm走.如果vk1和vk2都能到达vpm,肯定vk1必需先能够达到vk2. 这说明从vk1到vpm时的剩余油量肯定&gt;=vk2到vpm时的剩余油量. 有了这个单调性,再加上油余量的区间性以及区间可合并性, 就可以维护一个单调的栈.栈中顶点的访问次序递增,剩余油量递减且不小于0.正扫一遍反扫一遍分别判断顺时针和逆时针.<br><br>A Walk in the Park<br>题意:<br>二维平面上有一些(N&lt;=10^5)无限长的水平线和竖直线(M&lt;=10^5), 以及一些不在线上的点. 人可以沿任意线走.<br>称某个点是可见的, 当且仅当人能站在某条线上, 以垂直于线的方向正对此点,并且人与点的连线上没有其它点阻碍视线.<br>求可见的点的个数.<br>解:<br>排序+离散化+线性扫描; 二分<br>先考虑能否从水平线上看到某个点.<br>将点按y坐标排序.<br>对同一x上的所有点,考虑不是起始或末尾的相邻的两个点,它们能被看到,当且仅当它们之间有直线.<br>这样可以把直线也按y排序, 顺序扫一遍.对某个坐标x,记录它上一个点的y值.<br>离散化和排序都是nlogn的, 但是线性扫描的思路很巧,值得注意.<br>直接二分更简单,对每对相邻的点,二分查找它们之间是否有线段.<br><img src ="http://www.cppblog.com/wolf5x/aggbug/90275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-07-16 20:12 <a href="http://www.cppblog.com/wolf5x/archive/2009/07/16/90275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>uva4031 Integer Transmission (DP)</title><link>http://www.cppblog.com/wolf5x/archive/2009/07/16/90271.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Thu, 16 Jul 2009 11:28:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/07/16/90271.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/90271.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/07/16/90271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/90271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/90271.html</trackback:ping><description><![CDATA[<span style="font-family: courier new;">uva4031 Integer Transmission (DP)</span><br style="font-family: courier new;"><span style="font-family: courier new;">题意:</span><br style="font-family: courier new;"><span style="font-family: courier new;">传送一个长度在64之内的01串,第i时刻发送出第i字节(i=0,1,...,L-1).对任意第i时刻发出的字节,它有可能在i+1,i+2,...,i+d+1(d&lt;=L)中的任一时刻到达接收端.当同一时刻有多个字节同时到达时,这些字节可以任意排列.</span><br style="font-family: courier new;"><span style="font-family: courier new;">问接收端可能收到多少种不同串? 并求出二进制最小的和最大的串.</span><br style="font-family: courier new;"><span style="font-family: courier new;">按位DP, 关键是确定前i位至多能有多少个0/1,至少必须有多少个0/1. 此题与windy's abc很相似, 但多了处变化.</span><br style="font-family: courier new;"><span style="font-family: courier new;">考虑 d=3, 原串为 1101011, 显然第1个1永远不可能跑到第2个0右边. 字符串的错位,本质上是某些1把它右边d之内的0挤到左边了. 因此对1, 它实际能向右移多少位,取决于它右边d之内有多少个0.</span><br style="font-family: courier new;"><span style="font-family: courier new;">这样预处理后按位DP即可.</span><br style="font-family: courier new;"><span style="font-family: courier new;">构造最小/最大数,只需尽量把1/0往低位扔就行了.</span><br style="font-family: courier new;"><br style="font-family: courier new;"><span style="font-family: courier new;">代码:</span><br style="font-family: courier new;"><br style="font-family: courier new;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%; font-family: courier new;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstdio</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstdlib</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstring</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cmath</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000;">typedef&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;ull;<br></span><span style="color: #008080;">&nbsp;10</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mi[</span><span style="color: #000000;">2</span><span style="color: #000000;">][</span><span style="color: #000000;">130</span><span style="color: #000000;">],&nbsp;mx[</span><span style="color: #000000;">2</span><span style="color: #000000;">][</span><span style="color: #000000;">130</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;12</span>&nbsp;<span style="color: #000000;">ull&nbsp;dp[</span><span style="color: #000000;">65</span><span style="color: #000000;">][</span><span style="color: #000000;">65</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;13</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b[</span><span style="color: #000000;">65</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;14</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N,D;<br></span><span style="color: #008080;">&nbsp;15</span>&nbsp;<span style="color: #000000;">ull&nbsp;K;<br></span><span style="color: #008080;">&nbsp;16</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;CAS;<br></span><span style="color: #008080;">&nbsp;17</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;18</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;init()<br></span><span style="color: #008080;">&nbsp;19</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k;<br></span><span style="color: #008080;">&nbsp;21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ull&nbsp;t;<br></span><span style="color: #008080;">&nbsp;22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(b,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(b));<br></span><span style="color: #008080;">&nbsp;23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(t</span><span style="color: #000000;">=</span><span style="color: #000000;">K,&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">N;&nbsp;t;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;t</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000;">&gt;&gt;=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;c[</span><span style="color: #000000;">2</span><span style="color: #000000;">][</span><span style="color: #000000;">130</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(c,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(c));<br></span><span style="color: #008080;">&nbsp;29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[b[i]][i]</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;c[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">],&nbsp;c[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;c[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(mi,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(mi));<br></span><span style="color: #008080;">&nbsp;34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(mx,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(mx));<br></span><span style="color: #008080;">&nbsp;35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx[b[i]][&nbsp;min(N,&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">c[b[i]</span><span style="color: #000000;">^</span><span style="color: #000000;">1</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">-</span><span style="color: #000000;">c[b[i]</span><span style="color: #000000;">^</span><span style="color: #000000;">1</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">D</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;]&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;mx[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;mx[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mi[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;N</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">-</span><span style="color: #000000;">i</span><span style="color: #000000;">-</span><span style="color: #000000;">mx[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]);<br></span><span style="color: #008080;">&nbsp;42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mi[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;N</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">-</span><span style="color: #000000;">i</span><span style="color: #000000;">-</span><span style="color: #000000;">mx[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]);<br></span><span style="color: #008080;">&nbsp;43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;44</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">&nbsp;45</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;46</span>&nbsp;<span style="color: #000000;">ull&nbsp;dodp()<br></span><span style="color: #008080;">&nbsp;47</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k,p;<br></span><span style="color: #008080;">&nbsp;49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ull&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(dp,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(dp));<br></span><span style="color: #008080;">&nbsp;51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[N][i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(p</span><span style="color: #000000;">=</span><span style="color: #000000;">N;&nbsp;p</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;p</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">mi[</span><span style="color: #000000;">0</span><span style="color: #000000;">][p];&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">mx[</span><span style="color: #000000;">0</span><span style="color: #000000;">][p];&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">=</span><span style="color: #000000;">N</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">-</span><span style="color: #000000;">p</span><span style="color: #000000;">-</span><span style="color: #000000;">i;<br></span><span style="color: #008080;">&nbsp;56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mi[</span><span style="color: #000000;">1</span><span style="color: #000000;">][p]&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;j</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">mx[</span><span style="color: #000000;">1</span><span style="color: #000000;">][p])&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(dp[p][i]</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(p</span><span style="color: #000000;">==</span><span style="color: #000000;">1</span><span style="color: #000000;">){&nbsp;ret&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;dp[p][i];&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;&nbsp;}<br></span><span style="color: #008080;">&nbsp;59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[p</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;dp[p][i];<br></span><span style="color: #008080;">&nbsp;60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[p</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">][i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;dp[p][i];<br></span><span style="color: #008080;">&nbsp;61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ret;<br></span><span style="color: #008080;">&nbsp;64</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">&nbsp;65</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;66</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;getans(ull&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">xx,&nbsp;ull&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">ii)<br></span><span style="color: #008080;">&nbsp;67</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k;<br></span><span style="color: #008080;">&nbsp;69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;c0[</span><span style="color: #000000;">2</span><span style="color: #000000;">][</span><span style="color: #000000;">65</span><span style="color: #000000;">],c1[</span><span style="color: #000000;">2</span><span style="color: #000000;">][</span><span style="color: #000000;">65</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(c0,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(c0));<br></span><span style="color: #008080;">&nbsp;71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(c1,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(c1));<br></span><span style="color: #008080;">&nbsp;72</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;73</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(b[i]</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;74</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c0[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]</span><span style="color: #000000;">++</span><span style="color: #000000;">,&nbsp;c1[</span><span style="color: #000000;">0</span><span style="color: #000000;">][min(N,i</span><span style="color: #000000;">+</span><span style="color: #000000;">D)]</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c1[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]</span><span style="color: #000000;">++</span><span style="color: #000000;">,&nbsp;c0[</span><span style="color: #000000;">1</span><span style="color: #000000;">][min(N,i</span><span style="color: #000000;">+</span><span style="color: #000000;">D)]</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">for(i=1;&nbsp;i&lt;=N;&nbsp;i++</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;79</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;xx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;80</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;81</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(c0[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(ii</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;82</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(c0[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(ii</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">|</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;83</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;84</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(c1[</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;xx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(xx</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">|</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;85</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(c1[</span><span style="color: #000000;">0</span><span style="color: #000000;">][i]</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;xx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(xx</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;87</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">&nbsp;88</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;89</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;solve()<br></span><span style="color: #008080;">&nbsp;90</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;91</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k;<br></span><span style="color: #008080;">&nbsp;92</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Case&nbsp;%d:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">CAS);<br></span><span style="color: #008080;">&nbsp;93</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%llu&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;dodp());<br></span><span style="color: #008080;">&nbsp;94</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ull&nbsp;xx,ii;<br></span><span style="color: #008080;">&nbsp;95</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getans(xx,&nbsp;ii);<br></span><span style="color: #008080;">&nbsp;96</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%llu&nbsp;%llu\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ii,&nbsp;xx);<br></span><span style="color: #008080;">&nbsp;97</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">&nbsp;98</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;99</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">100</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">101</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;CAS&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">102</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">N)</span><span style="color: #000000;">!=</span><span style="color: #000000;">EOF&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;N){<br></span><span style="color: #008080;">103</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;%llu</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">D,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">K);<br></span><span style="color: #008080;">104</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br></span><span style="color: #008080;">105</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br></span><span style="color: #008080;">106</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">107</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">108</span>&nbsp;<span style="color: #000000;"></span></div>
<br style="font-family: courier new;"><br><img src ="http://www.cppblog.com/wolf5x/aggbug/90271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-07-16 19:28 <a href="http://www.cppblog.com/wolf5x/archive/2009/07/16/90271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串匹配 后缀数组 trie图(更新)</title><link>http://www.cppblog.com/wolf5x/archive/2009/07/16/90269.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Thu, 16 Jul 2009 11:10:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/07/16/90269.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/90269.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/07/16/90269.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/90269.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/90269.html</trackback:ping><description><![CDATA[<span style="font-family: courier new;">字符串少量习题小结.<br><br>spoj694(易) 后缀数组<br>求一个字串的不同子串个数.<br>按rank考虑子串.加入子串S[i]时,获得了len-Sa[i]个不同子串.但其中height[i]个已经属于S[i-1]了,所以实际子串数增加了len-Sa[i]-S[i-1]. 顺序扫一遍height数组即得解.<br><br>spoj687(中) 后缀数组<br>求一个串的重复次数最多的连续重复子串.<br>设周期为L的连续重复子串存在,则点0,L,2L,...,kL必能覆盖到一个完整周期. 因此对L,考察这些点的字符相等情况,LCP情况,可得到L的解.<br>枚举L.<br>复杂度是O(n/1+n/2+...+n/n) = O(nlogn)<br><br>pku3693(中) 后缀数组<br>同spoj687,只是结果还要输出字典序最小的满足条件的串.可以借助rank数组直接比较字典序.只是要注意在考察点kL时,要把以(k-1)L+1,...,(k+1)L-1为起点的子串都访问一遍找最小rank者.<br><br>pku1743(中) 后缀数组<br>找一个串的最长不重叠相同子串.<br>由于某子串可能整体加上(或减去)相同偏移量,因此不直接对原串操作,而是构造新串b, 其中b[i]=a[i]-a[i-1]. 此时求得最长不重叠相同子串的长度+1便是结果.<br>可以二分长度,或者栈扫描(*)直接求最大长度.<br><br>whu1084(易) 后缀数组<br>求重复次数最多的不重叠子串长度<br>spoj687的简单版,不要求循环节连续,直接二分长度即可.<br><br>pku2778(易) 多串匹配+DP AC自动机,trie图<br>字符集大小为4, 给出m个(m&lt;=10)禁止单词(长度&lt;=10), 求长度为n(n&lt;=2*10^9)的不包含任何禁止单词的串的个数.<br>对禁止单词建立trie图,并计算出图中任意合法结点之间的转移数,这样便求得1步转移矩阵.<br>做n次方后的矩阵,第1行中属于合法状态的元素之和即为解.<br>禁止单词总长度不超过100,因此合法状态亦&lt;100.总复杂度100^3*logN<br><br>zju3228(中) Searching the String 后缀数组,AC自动机,trie图<br>原串长10^5, 现在有10^5次查询, 每次查询一个长度&lt;=6的模式串在原串中的最大匹配次数.<br>模式串的匹配方式有可重叠和不可重叠两种, 需针对查询的类型返回相应值.<br>后缀数组解法(在线):<br>对原串建立sa和height数组.由于模式串长度最大只有6, 我们可以将height数组分别按L=1..6分组,预处理求出相应长度每组内不重叠子串的最大匹配次数,此过程O(6*nlogn).<br>另外由于sa数组将所有后缀按字典序排好了,所以对一个询问, 可以二分找到它在sa中第一次出现的位置p1和最后一次出现的位置p2, 则p2-p1+1就是可重叠匹配的答案. 对不可重叠匹配,只需直接返回p1处预处理时的值. 每次查询O(logn).<br>trie图,AC自动机解法(离线):<br>把所有查询建trie图, 对图中的每个有效结点维护:该串长度,两类查询的计数,该串上一次被匹配的位置, 还要用个链表记下这个串属于哪些查询.<br>剩下的就是经典的自动机多串匹配了.<br><br><br>(*)关于栈扫:<br>height数组具有区间性,各个不同前缀被相应的极小值隔开,而一个区间中又有多个子区间.各区间值大于区间端点的部分互不影响.因此可以维护一个存放height值不减的栈,栈中每个元素的附属值, 记录了它在栈中相邻的两个元素为端点的连续区间内所有height值不小于它的必要信息.比如此题要记录height&gt;=k的连续区间内sa[i] 的最大值和最小值.<br>栈扫描的经典例子移步pku2559.<br><br><br>(**)trie图备忘:<br>比trie树多了个后缀指针psuf. 设当前结点字母为c, 则psuf指向父亲的后缀的pch[c].<br>trie树中的后代结点指针pch(已经更名为状态转移指针),当相应后代存在时,指向后代;否则指向当前结点的后缀的相应后代,即pch[k]=node[pa].pch[k].<br>后缀指针: 在接下来的状态转移中,当前结点与它的后缀结点等价.<br>后代结点指针: 在当前状态下,接收到字符ch时,转移到pch[ch]指向的结点.<br></span><img src ="http://www.cppblog.com/wolf5x/aggbug/90269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-07-16 19:10 <a href="http://www.cppblog.com/wolf5x/archive/2009/07/16/90269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2990 Board Game (二分图匹配)</title><link>http://www.cppblog.com/wolf5x/archive/2009/07/06/89351.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 06 Jul 2009 03:55:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/07/06/89351.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/89351.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/07/06/89351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/89351.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/89351.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: courier new">二分图匹配的巧妙应用</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">相当巧妙!</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">CTU 2005 Open</span><br style="FONT-FAMILY: courier new"><a style="FONT-FAMILY: courier new" href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2990">http://acm.pku.edu.cn/JudgeOnline/problem?id=2990</a><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">题意:</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">8*8的棋盘, 初始放置2个相同的棋子. Alice和Bob轮流行动. 每次行动可以把其中一个棋子移到它上下左右相邻格内(某些格子坏掉了,则不能移). 当某人的移动使两棋子重合时, 他赢. 另, 一局中不能出现重复的局面. 比如(0,0)(4,0) -&gt; (1,0)(4,0)合法, 此时如果再(1,0)(4,0) -&gt; (0,0)(4,0)则非法. 当一个人无子可动时, 他输.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">两人都用最优策略. 问先手的Alice必胜还是必败?</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">解:</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">把每个合法状态看成一个顶点, 则状态转移就是向其它点连边. 这样建的图是二分图.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">而两人下棋, 就是在图上以初始状态的顶点为起点, 沿边移动. 由于建的图是由所有合法状态与合法移动组成的, 因此, 移动到哪个集合(A与B), 就表示轮到谁行动. 当无法再移动时, 点在哪个集合就表示对应的人输了.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">状态不重复出现, 表示移动路径没有环.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">谁赢谁输, 与路径长度的奇偶性密切相关.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">考虑二分图的最大匹配, 也是个找交替路径扩张的过程.</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">设起点为v, 分情况讨论v的状态与路径长度的关系: </span><br><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">(1) v是自由点. 这表示v的任意邻接点vB都是浸润点. 不管选哪个vB, 都可以沿着它的匹配边走到vA'. 只要Bob每次都沿匹配边走, 由于不可能达到另一个自由点, 因此终点必属于A, Bob必胜.</span><br><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">(2) v是浸润点, 此时v所在的交替路径两个端点分布情况可能有几种:</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; a)对所有交替路径, 端点都在B集. 这时只要Alice每次都沿着匹配边走, 必胜.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; b)存在一条交替路径, 端点都在A集. 把沿v的匹配边走的那一半全部置反, 就变成(1)的状态了, 因此2者等价.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; c)沿v的匹配边走的那一半全终止于B, 另一半终止于A. 只要Alice一开始就沿匹配边走, 后面策略同a.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; 其它情形不可能在最大匹配中出现, 故不讨论. 这正是充分利用了最大匹配的性质.</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">因此对本题先求最大匹配, 然后判断是否为(1)或(2b), 即可知胜负.</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">代码如下:</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MAX_VERT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MAX_EDGE&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MAX_VERT&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;EDGE{<br></span><span style="COLOR: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v,e;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="COLOR: #000000">}edg[&nbsp;MAX_EDGE&nbsp;];<br></span><span style="COLOR: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;se,&nbsp;gg[&nbsp;MAX_VERT&nbsp;],&nbsp;nv;<br></span><span style="COLOR: #008080">&nbsp;10</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start;<br></span><span style="COLOR: #008080">&nbsp;11</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;mat[&nbsp;MAX_VERT&nbsp;];<br></span><span style="COLOR: #008080">&nbsp;12</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;ok[&nbsp;MAX_VERT&nbsp;],&nbsp;vis[&nbsp;MAX_VERT&nbsp;];<br></span><span style="COLOR: #008080">&nbsp;13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;N,M;<br></span><span style="COLOR: #008080">&nbsp;15</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;bo[</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;17</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;chkpt(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br></span><span style="COLOR: #008080">&nbsp;18</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">M&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;y</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;y</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">N)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bo[y][x]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">#</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;22</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;24</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断合法状态&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;25</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;chksta(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y2)<br></span><span style="COLOR: #008080">&nbsp;26</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">chkpt(x1,y1)&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">chkpt(x2,y2))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(abs(x1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x2)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">abs(y1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y2)</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;30</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;31</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;32</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">位压缩存状态&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;33</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;encode(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y2)&nbsp;<br></span><span style="COLOR: #008080">&nbsp;34</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(y1&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;y2&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;(y1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">y2&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;x1&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;x2))&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">小点放前面,&nbsp;避免重复状态&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;36</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(y1,y2),&nbsp;swap(x1,x2);<br></span><span style="COLOR: #008080">&nbsp;37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x1;<br></span><span style="COLOR: #008080">&nbsp;38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(v</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;y1;<br></span><span style="COLOR: #008080">&nbsp;39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(v</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;x2;<br></span><span style="COLOR: #008080">&nbsp;40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(v</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;y2;<br></span><span style="COLOR: #008080">&nbsp;41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;v;<br></span><span style="COLOR: #008080">&nbsp;42</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;43</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;44</span>&nbsp;<span style="COLOR: #000000">inline&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;addedge(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;u,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v)<br></span><span style="COLOR: #008080">&nbsp;45</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;edg[se].v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;v;<br></span><span style="COLOR: #008080">&nbsp;47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;edg[se].e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gg[u];<br></span><span style="COLOR: #008080">&nbsp;48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;gg[u]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;se</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;49</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;50</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;51</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;addmove(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;u,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y2)<br></span><span style="COLOR: #008080">&nbsp;52</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">chksta(x1,&nbsp;y1,&nbsp;x2,&nbsp;y2))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;encode(x1,&nbsp;y1,&nbsp;x2,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addedge(u,&nbsp;v);<br></span><span style="COLOR: #008080">&nbsp;56</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;57</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;58</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加状态转移的边&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;59</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;gene(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y2)<br></span><span style="COLOR: #008080">&nbsp;60</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;61</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">chksta(x1,y1,x2,y2))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;62</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;u&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;encode(x1,y1,x2,y2);<br></span><span style="COLOR: #008080">&nbsp;63</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ok[u]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mat[u]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;65</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;y1,&nbsp;x2,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;66</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;y1,&nbsp;x2,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;67</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1,&nbsp;y1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;x2,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;68</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1,&nbsp;y1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;x2,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;69</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1,&nbsp;y1,&nbsp;x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1,&nbsp;y1,&nbsp;x2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;y2);<br></span><span style="COLOR: #008080">&nbsp;71</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1,&nbsp;y1,&nbsp;x2,&nbsp;y2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;72</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;addmove(u,&nbsp;x1,&nbsp;y1,&nbsp;x2,&nbsp;y2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;73</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;74</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;75</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">建图&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;76</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;input()<br></span><span style="COLOR: #008080">&nbsp;77</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;78</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,&nbsp;y1,&nbsp;x2,&nbsp;y2;<br></span><span style="COLOR: #008080">&nbsp;79</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;80</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(y1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;y1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">N;&nbsp;y1</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;81</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,bo[y1]);<br></span><span style="COLOR: #008080">&nbsp;82</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;83</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;se&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;84</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(gg,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(gg));<br></span><span style="COLOR: #008080">&nbsp;85</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;nv&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;M&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;86</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(ok,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ok));<br></span><span style="COLOR: #008080">&nbsp;87</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(mat,&nbsp;</span><span style="COLOR: #000000">0xff</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(mat));<br></span><span style="COLOR: #008080">&nbsp;88</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br></span><span style="COLOR: #008080">&nbsp;89</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;90</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;tx[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],ty[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;91</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(y1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;y1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">N;&nbsp;y1</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">&nbsp;92</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;x1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">M;&nbsp;x1</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">&nbsp;93</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bo[y1][x1]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">P</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;94</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx[c]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x1,&nbsp;ty[c]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y1,&nbsp;c</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;95</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;x2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">M;&nbsp;x2</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;96</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gene(x1,y1,x2,y1);<br></span><span style="COLOR: #008080">&nbsp;97</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(y2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;y2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">N;&nbsp;y2</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;98</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;x2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">M;&nbsp;x2</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;99</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gene(x1,y1,x2,y2);<br></span><span style="COLOR: #008080">100</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">101</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">102</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;encode(tx[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;ty[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;tx[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;ty[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">103</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">104</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">105</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;hungrey(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r)<br></span><span style="COLOR: #008080">106</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">107</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这个匹配函数不分XY集,&nbsp;因此匹配点双方的mat标记都要修改&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">108</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k;<br></span><span style="COLOR: #008080">109</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vis[r]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">110</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gg[r];&nbsp;j</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">edg[j].e){<br></span><span style="COLOR: #008080">111</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;edg[j].v;<br></span><span style="COLOR: #008080">112</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vis[v]){<br></span><span style="COLOR: #008080">113</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[v]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">114</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(mat[v]</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;hungrey(mat[v])){<br></span><span style="COLOR: #008080">115</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat[v]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;r;<br></span><span style="COLOR: #008080">116</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat[r]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;v;<br></span><span style="COLOR: #008080">117</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">118</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">119</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">120</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">121</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">122</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">123</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">124</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">125</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">126</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k;<br></span><span style="COLOR: #008080">127</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">M)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">EOF){<br></span><span style="COLOR: #008080">128</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input();<br></span><span style="COLOR: #008080">129</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">ok[start]&nbsp;){<br></span><span style="COLOR: #008080">130</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Alice&nbsp;wins.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">131</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">132</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">133</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">134</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">nv;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">135</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br></span><span style="COLOR: #008080">136</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;mat[i]</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;)&nbsp;hungrey(i);<br></span><span style="COLOR: #008080">137</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">138</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;mat[start]</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;){&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断是否是(2b)并转化为(1)&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">139</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br></span><span style="COLOR: #008080">140</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[start]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">141</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hungrey(mat[start]))<br></span><span style="COLOR: #008080">142</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat[start]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">143</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">144</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">145</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;mat[start]</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">146</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Alice&nbsp;wins.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">147</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">148</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Bob&nbsp;wins.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">149</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">150</span>&nbsp;<span style="COLOR: #000000">&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></span><span style="COLOR: #008080">151</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">152</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new">
<img src ="http://www.cppblog.com/wolf5x/aggbug/89351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-07-06 11:55 <a href="http://www.cppblog.com/wolf5x/archive/2009/07/06/89351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Nice Prefixes (DP好题)</title><link>http://www.cppblog.com/wolf5x/archive/2009/06/29/88839.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 29 Jun 2009 14:18:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/06/29/88839.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/88839.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/06/29/88839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/88839.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/88839.html</trackback:ping><description><![CDATA[<p><a href="http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1586">http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1586</a><br>题意:<br>一共有K(K&lt;=50)种字母,组成一个长度为L(L&lt;=10^18)的串.<br>这个串需满足要求:<br>对任意的 1&lt;=i&lt;=L , 以及任意的 1&lt;=k1,k2&lt;=K 且 k1!=k2, 在前缀 s[1..i]中,字母k1的个数和字母k2的个数之差的绝对值&lt;=2.<br>例如: abac是合法的; 而abbbc不合法, 因为前缀abbb中字母b和c的个数相差为3.<br>建立状态:<br>从&lt;=2 入手找状态. 可以设前c个字母中, 最小个数为m, 字母数为m的种类为i, m+1的种类为j, m+2的种类为k. 化简状态可得 比最小个数多1的种类为i,比最小个数多2的种类为j. 而经过数学推导(不懂), 可知 j+2k&lt;K, 也就是当 c%K 已知时, 可直接由k确定i和j. 这样状态数为 50*50=2500, 还是不能用矩阵法. 进一步思考, 由c%K=0时的结果可以推出c%K=1时的结果,递推可把c%K=0...K-1的结果都求出. 而要求L步的结果数,实际上并不用去管是1步1步走,还是2步2步走. 所以我们可以直接一次走K步! 这样就把c%K这一维状态也消除了.<br>于是可以设矩阵m[i,j]为c%K=0时,k经过K步从i转移到j的方法数.<br>这样先求出 L-L%K 步的方法数, 最后 L%K 步直接dp即可.<br>整体复杂度为 K^3*log(L/K).</p>
<p><span style="COLOR: red">本题关键: 由k和c%K唯一确定i和j; 一次走K步, 消除状态c%K, 实际上不同c%K对应的状态是冗余的, 因为不用去管中间的过程.</span><br></p>
<img src ="http://www.cppblog.com/wolf5x/aggbug/88839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-06-29 22:18 <a href="http://www.cppblog.com/wolf5x/archive/2009/06/29/88839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第二次个人赛</title><link>http://www.cppblog.com/wolf5x/archive/2009/06/29/88838.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 29 Jun 2009 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/06/29/88838.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/88838.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/06/29/88838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/88838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/88838.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: courier new">E. Ski Lessons (DP)<br>题意:<br>滑雪场有N(N&lt;=10000)种项目, 可以从任意时刻开始, 可以反复参加. 每种项目要求参与者技能值(&lt;=100)至少为c[i], 耗费连续的d[i]单位时间.<br>此外,滑雪场提供S(S&lt;=100)个培训课程. 每个课程开始时间为m[i], 持续时间l[i], 结束后, 参加者的技能值变为a[i]. 如果选择参加某个课程,不能迟到早退. 只能同时参加一个课程.<br>一个人在任意时刻只能做一件事, 而且他总共有 T(T&lt;=10000) 单位时间. 他必须在时刻T结束所有活动.<br>问如何安排可以使得此人参加最多次滑雪项目, 求最大次数.<br>解:<br>O(100*N)预处理, len[i][j]表示技能值为i时, 参加一次任意项目的最短时间.<br>O(S*S)DP, dp[i]表示在课程i开始的前一时刻, 已参加项目的最大次数.<br><span style="COLOR: red">注意到, 结束一项课程后人的技能值是一定的. 因此, 可以枚举参加i之前最近参加的课程k, 两次课程之间的收益可直接计算.</span> 则dp[i] = max(dp[k]+ (m[i]-m[k]-l[k])/len[a[k]]).</span>
<img src ="http://www.cppblog.com/wolf5x/aggbug/88838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-06-29 22:11 <a href="http://www.cppblog.com/wolf5x/archive/2009/06/29/88838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一次个人赛</title><link>http://www.cppblog.com/wolf5x/archive/2009/06/29/88837.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 29 Jun 2009 13:50:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/06/29/88837.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/88837.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/06/29/88837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/88837.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/88837.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: courier new">D.<br>题意:<br>给一个初值C,和两个迭代公式 fi(x)=a[i]*x/d[i]+b[i], 公式中1&lt;=d&lt;a&lt;=20, 1&lt;=b&lt;=20,且都为整数. 除法为整型除法.<br>由初值C开始迭代, 计算出来的结果又可以任意代入公式继续迭代.<br>求能得到的所有数(包括C)中第N大的. 1&lt;=N&lt;=400000.<br>解:<br><span style="COLOR: red">一个队列,两个指针,</span>不断分别将指向的两个值代入两个公式计算,取小的加入列尾.注意判重.</p>
<p style="FONT-FAMILY: courier new">G.<br>题意:<br>无向图,顶点集为U, 给一个不包含源点v的子顶点集S, 问至少要在U-S-{v}中删掉多少个点,才能完全割断S与v的联系. S中没有点与v直接相邻.<br>解:<br><span style="COLOR: red">限制顶点流量,最大流(最小割),将点i0拆成i-&gt;i',所有入边指向i,出边从i'指出.</span>对有可能损坏的点,边容量置1,不可能损坏的点置inf.其它边容量为inf.</p>
<p style="FONT-FAMILY: courier new"><span style="COLOR: red">I.</span><br>题意:<br>给一个颜色序列s, 序列长度&lt;=40000, 其中包含的颜色种类&lt;=40000. 可以将原序列任意分割, 分割后每一个子段的代价分别为f(k)=k*k,其中k为子段中包含的颜色种类数.<br>求一个分割方案,使sigma(f(k))最小.<br>解:<br>DP.<span style="COLOR: red">关键的优化在于,转移dp[i]时,只用枚举计算min{dp[j]+cost(j+1,i)},其中子段[j+1,i]中至多有upbound=ceil(sqrt(i))种不同颜色.因为代价函数是k^2,而长度为k的子段代价上界是k,所以枚举的颜色数&lt;=sqrt(k).<br></span>另显然,颜色数都为m的所有可能区间[j+1,i],选择最长的肯定最优.<br>因此维护pos[m],表示从当前扫描位置开始向左,颜色种类为m的最长区间的左端点.<br>为了更新pos[m],再设数组last[n],记录上一次出现颜色n的位置.<br>若color[i]==color[i-1],则不更新pos; 否则,所有pos[k]&gt;=last[color[i]]的区间内颜色种类都变成k+1,因此将这段pos[1..m]右移,将pos[1]置为i.<br></p>
<img src ="http://www.cppblog.com/wolf5x/aggbug/88837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-06-29 21:50 <a href="http://www.cppblog.com/wolf5x/archive/2009/06/29/88837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3726 Windy's ABC (DP)</title><link>http://www.cppblog.com/wolf5x/archive/2009/06/29/88835.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 29 Jun 2009 13:44:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/06/29/88835.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/88835.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/06/29/88835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/88835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/88835.html</trackback:ping><description><![CDATA[pku 3726 Windy's ABC<br />题意:<br />给一个由ABC三种字母构成的长度不超过500的字串.<br />定义这个串的合法副本为:<br />原串任意位置字母的下标,与它在新串中的下标绝对值之差不超过 Ri.<br />求合法副本的种类数.<br />注:<br />1. 原串本身也是个合法副本<br />2. 求的是不同串的种类数, "A1B2B3A4" 和 "A1B3B2A4" 算同一种.<br />解:<br />先通过O(n)的递推, 求出每种字母在前k位中至少需要/至多能出现多少次, 然后500^3的DP.<br />对一个合法的状态(i,j,k)(分别表示3种字母的个数), 扩展它的3种后续状态.<br />这里不用检查扩展出的新状态的合法性, 因为到下一步DP时, 只有合法的状态才会被继续扩展. 这是这题解法处理的巧妙之处.<br /><br />代码:<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><font face="Courier New"><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cstdio</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cstdlib</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">cstring</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">algorithm</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">namespace</span><span style="color: rgb(0, 0, 0);"> std;<br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">const</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> MOD </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">20090305</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);"> ch[</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> {</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">A</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">B</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">C</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">};<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> n[</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">][</span><span style="color: rgb(0, 0, 0);">510</span><span style="color: rgb(0, 0, 0);">][</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> dp[</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">][</span><span style="color: rgb(0, 0, 0);">510</span><span style="color: rgb(0, 0, 0);">][</span><span style="color: rgb(0, 0, 0);">510</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> R[</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">],L;<br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);"> S[</span><span style="color: rgb(0, 0, 0);">510</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> T;<br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">14</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> prepare(){<br /></span><span style="color: rgb(0, 128, 128);">15</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i,j,k;<br /></span><span style="color: rgb(0, 128, 128);">16</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> c[</span><span style="color: rgb(0, 0, 0);">510</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);">17</span> <span style="color: rgb(0, 0, 0);">    memset(n,</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 255);">sizeof</span><span style="color: rgb(0, 0, 0);">(n));<br /></span><span style="color: rgb(0, 128, 128);">18</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">19</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> cnt </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">20</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; j</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">L; j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">21</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(S[j]</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">A</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> i) cnt</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">22</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">printf("%d,%d,%d ",i,j,cnt);</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">23</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(j</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">R[i]) n[i][j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">R[i]][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cnt;<br /></span><span style="color: rgb(0, 128, 128);">24</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(j</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">L</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">R[i]) n[i][j</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">R[i]][</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cnt;<br /></span><span style="color: rgb(0, 128, 128);">25</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);">26</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; j</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">R[i]; j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">27</span> <span style="color: rgb(0, 0, 0);">            n[i][L</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">j][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cnt;<br /></span><span style="color: rgb(0, 128, 128);">28</span> <span style="color: rgb(0, 0, 0);">            n[i][j][</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">29</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);">30</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">31</span> <span style="color: rgb(0, 0, 0);">}<br /></span><span style="color: rgb(0, 128, 128);">32</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">33</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> dodp(){<br /></span><span style="color: rgb(0, 128, 128);">34</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> l,i,j,k;<br /></span><span style="color: rgb(0, 128, 128);">35</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> ans </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">36</span> <span style="color: rgb(0, 0, 0);">    memset(dp,</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 255);">sizeof</span><span style="color: rgb(0, 0, 0);">(dp));<br /></span><span style="color: rgb(0, 128, 128);">37</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">L; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br /></span><span style="color: rgb(0, 128, 128);">38</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; j</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">L; j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br /></span><span style="color: rgb(0, 128, 128);">39</span> <span style="color: rgb(0, 0, 0);">            dp[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">][i][j] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">40</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(l</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; l</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">L; l</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">41</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> p1</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">l</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">, p2</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">(l</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">42</span> <span style="color: rgb(0, 0, 0);">        memset(dp[p2],</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 255);">sizeof</span><span style="color: rgb(0, 0, 0);">(dp[p2]));<br /></span><span style="color: rgb(0, 128, 128);">43</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">n[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">][l][</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">]; i</span><span style="color: rgb(0, 0, 0);">&lt;=</span><span style="color: rgb(0, 0, 0);">n[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">][l][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">44</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">n[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">][l][</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">]; j</span><span style="color: rgb(0, 0, 0);">&lt;=</span><span style="color: rgb(0, 0, 0);">n[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">][l][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]; j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">45</span> <span style="color: rgb(0, 0, 0);">                k </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> l</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">i</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">j;<br /></span><span style="color: rgb(0, 128, 128);">46</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">printf("s%d,%d,%d ",l,i,j);</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">47</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(k</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">n[</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">][l][</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);"> k</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">n[</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">][l][</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]) </span><span style="color: rgb(0, 0, 255);">continue</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">48</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">dp[p1][i][j]) </span><span style="color: rgb(0, 0, 255);">continue</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">49</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">printf("y%d,%d,%d(%d) ",l,i,j,dp[p1][i][j]);</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">50</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(l</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">L</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">){ ans </span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);"> dp[p1][i][j]; </span><span style="color: rgb(0, 0, 255);">continue</span><span style="color: rgb(0, 0, 0);">; }<br /></span><span style="color: rgb(0, 128, 128);">51</span> <span style="color: rgb(0, 0, 0);">                dp[p2][i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">][j] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (dp[p2][i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">][j]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">dp[p1][i][j]) </span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);"> MOD;<br /></span><span style="color: rgb(0, 128, 128);">52</span> <span style="color: rgb(0, 0, 0);">                dp[p2][i][j</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (dp[p2][i][j</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">dp[p1][i][j]) </span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);"> MOD;<br /></span><span style="color: rgb(0, 128, 128);">53</span> <span style="color: rgb(0, 0, 0);">                dp[p2][i][j] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (dp[p2][i][j]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">dp[p1][i][j]) </span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);"> MOD;<br /></span><span style="color: rgb(0, 128, 128);">54</span> <span style="color: rgb(0, 0, 0);">            }<br /></span><span style="color: rgb(0, 128, 128);">55</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);">56</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">57</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ans;<br /></span><span style="color: rgb(0, 128, 128);">58</span> <span style="color: rgb(0, 0, 0);">}<br /></span><span style="color: rgb(0, 128, 128);">59</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">60</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> main(){<br /></span><span style="color: rgb(0, 128, 128);">61</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i,j,k;<br /></span><span style="color: rgb(0, 128, 128);">62</span> <span style="color: rgb(0, 0, 0);">    scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">T);<br /></span><span style="color: rgb(0, 128, 128);">63</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(T</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">){<br /></span><span style="color: rgb(0, 128, 128);">64</span> <span style="color: rgb(0, 0, 0);">        scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d %d %d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,R,R</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,R</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">65</span> <span style="color: rgb(0, 0, 0);">        scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%s</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,S);<br /></span><span style="color: rgb(0, 128, 128);">66</span> <span style="color: rgb(0, 0, 0);">        L </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> strlen(S);<br /></span><span style="color: rgb(0, 128, 128);">67</span> <span style="color: rgb(0, 0, 0);">        prepare();<br /></span><span style="color: rgb(0, 128, 128);">68</span> <span style="color: rgb(0, 0, 0);">        printf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d\n</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,dodp());<br /></span><span style="color: rgb(0, 128, 128);">69</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">70</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">71</span> <span style="color: rgb(0, 0, 0);">}<br /></span><span style="color: rgb(0, 128, 128);">72</span> </font><span style="color: rgb(0, 0, 0);"></span></div><br /><br /><br /><img src ="http://www.cppblog.com/wolf5x/aggbug/88835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-06-29 21:44 <a href="http://www.cppblog.com/wolf5x/archive/2009/06/29/88835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]frkstyc的POJ分类 </title><link>http://www.cppblog.com/wolf5x/archive/2009/06/20/88196.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Sat, 20 Jun 2009 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/06/20/88196.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/88196.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/06/20/88196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/88196.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/88196.html</trackback:ping><description><![CDATA[<strong>frkstyc的POJ分类</strong> <br><strong>zhj5825 发表于 2006-9-3 17:12:00</strong><br>
<p><span id="ob_logd1482916"></span> 1474 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>1000 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1003 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1004 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1005 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1008 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1023 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1045 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1046 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1047 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1079 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1102 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1126 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1140 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1207 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1218 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1220 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1289 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1306 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1316 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1326 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1423 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1450 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1477 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1488 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1491 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1493 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1517 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1519 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1528 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1552 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1565 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1583 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1628 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1635 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1657 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1658 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1663 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1665 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1759 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1775 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1781 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1809 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1859 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1868 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1936 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1942 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1969 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2000 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2006 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2013 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2015 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2017 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2027 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2083 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2105 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2109 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2126 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2136 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2140 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2141 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2144 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2159 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2190 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2196 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2231 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2249 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2262 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2272 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2301 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2305 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2309 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2316 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2321 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2328 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2330 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2350 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2351 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2379 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2380 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2390 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2403 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>2419 &nbsp; &nbsp; &nbsp; &nbsp;ad hoc <br>1131 &nbsp; &nbsp; &nbsp; &nbsp;algebra <br>1707 &nbsp; &nbsp; &nbsp; &nbsp;algebra <br>1125 &nbsp; &nbsp; &nbsp; &nbsp;all pairs shortest paths <br>1375 &nbsp; &nbsp; &nbsp; &nbsp;analytical geometry <br>1473 &nbsp; &nbsp; &nbsp; &nbsp;analytical geometry <br>2098 &nbsp; &nbsp; &nbsp; &nbsp;analytical geometry <br>2242 &nbsp; &nbsp; &nbsp; &nbsp;analytical geometry <br>1001 &nbsp; &nbsp; &nbsp; &nbsp;arbitrary precision calculation <br>1354 &nbsp; &nbsp; &nbsp; &nbsp;arbitrary precision calculation <br>1454 &nbsp; &nbsp; &nbsp; &nbsp;arbitrary precision calculation <br>1503 &nbsp; &nbsp; &nbsp; &nbsp;arbitrary precision calculation <br>2389 &nbsp; &nbsp; &nbsp; &nbsp;arbitrary precision calculation <br>2413 &nbsp; &nbsp; &nbsp; &nbsp;arbitrary precision calculation <br>2240 &nbsp; &nbsp; &nbsp; &nbsp;Bellman-Ford algorithm <br>1195 &nbsp; &nbsp; &nbsp; &nbsp;binary indexed tree <br>1330 &nbsp; &nbsp; &nbsp; &nbsp;binary search <br>2418 &nbsp; &nbsp; &nbsp; &nbsp;binary search tree <br>1466 &nbsp; &nbsp; &nbsp; &nbsp;bipartite graph matching <br>1087 &nbsp; &nbsp; &nbsp; &nbsp;bipartite graph matching or maximum flow <br>2018 &nbsp; &nbsp; &nbsp; &nbsp;bisection and dynamic programming <br>1505 &nbsp; &nbsp; &nbsp; &nbsp;bisection and greedy <br>1434 &nbsp; &nbsp; &nbsp; &nbsp;bisection method <br>2155 &nbsp; &nbsp; &nbsp; &nbsp;bit operation or binary indexed tree <br>1111 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>1562 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>1724 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>1753 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>1915 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>1924 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2225 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2243 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2251 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2312 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2386 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2415 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2426 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>2435 &nbsp; &nbsp; &nbsp; &nbsp;breadth first search <br>1209 &nbsp; &nbsp; &nbsp; &nbsp;calendar <br>2080 &nbsp; &nbsp; &nbsp; &nbsp;calendar <br>2210 &nbsp; &nbsp; &nbsp; &nbsp;calendar <br>1031 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>1127 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>1648 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>1654 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>1675 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>1912 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>2099 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>2150 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>2318 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>2398 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>2423 &nbsp; &nbsp; &nbsp; &nbsp;computational geometry <br>1032 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1147 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1148 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1702 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1844 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1898 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1906 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>2085 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>2319 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>2356 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>2402 &nbsp; &nbsp; &nbsp; &nbsp;construction <br>1426 &nbsp; &nbsp; &nbsp; &nbsp;construction or breadth first search <br>1606 &nbsp; &nbsp; &nbsp; &nbsp;construction or breadth first search <br>1113 &nbsp; &nbsp; &nbsp; &nbsp;convex hull <br>2187 &nbsp; &nbsp; &nbsp; &nbsp;convex hull and enumeration <br>1010 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1011 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1022 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1054 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1118 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1144 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1190 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1564 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1655 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1904 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1980 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>2184 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>2186 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>2362 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>2378 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>2438 &nbsp; &nbsp; &nbsp; &nbsp;depth first search <br>1151 &nbsp; &nbsp; &nbsp; &nbsp;discretization and union of intervals or segment tree <br>1182 &nbsp; &nbsp; &nbsp; &nbsp;disjoint sets <br>1291 &nbsp; &nbsp; &nbsp; &nbsp;disjoint sets <br>1703 &nbsp; &nbsp; &nbsp; &nbsp;disjoint sets <br>1984 &nbsp; &nbsp; &nbsp; &nbsp;disjoint sets <br>2021 &nbsp; &nbsp; &nbsp; &nbsp;disjoint sets <br>2236 &nbsp; &nbsp; &nbsp; &nbsp;disjoint sets <br>2371 &nbsp; &nbsp; &nbsp; &nbsp;divide and conquer <br>2388 &nbsp; &nbsp; &nbsp; &nbsp;divide and conquer <br>1014 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1015 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1018 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1036 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1038 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1050 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1088 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1093 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1156 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1157 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1159 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1160 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1163 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1170 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1191 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1221 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1338 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1458 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1579 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1631 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1651 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1661 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1664 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1678 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1685 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1722 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1732 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1745 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1821 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1909 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1923 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1925 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>1953 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2033 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2133 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2151 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2181 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2229 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2247 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2250 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2342 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2353 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2355 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2385 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2393 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2397 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2414 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2430 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2439 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2441 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2442 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming <br>2084 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming and arbitrary precision calculation <br>1387 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming and enumeration <br>1322 &nbsp; &nbsp; &nbsp; &nbsp;dynamic programming or generating function <br>1012 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1013 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1142 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1171 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1183 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1318 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1411 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1543 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1647 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1650 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1828 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1916 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1930 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2078 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2100 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2191 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2245 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2326 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2346 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2363 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2381 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2436 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>2444 &nbsp; &nbsp; &nbsp; &nbsp;enumeration <br>1267 &nbsp; &nbsp; &nbsp; &nbsp;enumeration and bisection <br>1129 &nbsp; &nbsp; &nbsp; &nbsp;enumeration and depth first search <br>1186 &nbsp; &nbsp; &nbsp; &nbsp;enumeration and hash table <br>1348 &nbsp; &nbsp; &nbsp; &nbsp;enumration <br>1472 &nbsp; &nbsp; &nbsp; &nbsp;expression evaluation <br>2106 &nbsp; &nbsp; &nbsp; &nbsp;expression evaluation <br>2246 &nbsp; &nbsp; &nbsp; &nbsp;expression evaluation <br>2269 &nbsp; &nbsp; &nbsp; &nbsp;expression evaluation <br>2234 &nbsp; &nbsp; &nbsp; &nbsp;game theory <br>2348 &nbsp; &nbsp; &nbsp; &nbsp;game theory <br>2425 &nbsp; &nbsp; &nbsp; &nbsp;game theory <br>1799 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>1927 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>1939 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>1940 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>2007 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>2208 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>2276 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>2365 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>2405 &nbsp; &nbsp; &nbsp; &nbsp;geometry <br>1981 &nbsp; &nbsp; &nbsp; &nbsp;geometry and enumeration <br>1090 &nbsp; &nbsp; &nbsp; &nbsp;Gray code <br>1832 &nbsp; &nbsp; &nbsp; &nbsp;Gray code <br>1017 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1042 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1083 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1230 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1328 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1456 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1862 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1922 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2054 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2082 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2209 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2291 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2313 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2325 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2370 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2376 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2431 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2433 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>2437 &nbsp; &nbsp; &nbsp; &nbsp;greedy <br>1405 &nbsp; &nbsp; &nbsp; &nbsp;greedy and arbitrary precision calculation <br>1659 &nbsp; &nbsp; &nbsp; &nbsp;greedy and construction <br>1026 &nbsp; &nbsp; &nbsp; &nbsp;group theory <br>1033 &nbsp; &nbsp; &nbsp; &nbsp;group theory <br>1286 &nbsp; &nbsp; &nbsp; &nbsp;group theory <br>1674 &nbsp; &nbsp; &nbsp; &nbsp;group theory <br>2369 &nbsp; &nbsp; &nbsp; &nbsp;group theory <br>2409 &nbsp; &nbsp; &nbsp; &nbsp;group theory <br>2366 &nbsp; &nbsp; &nbsp; &nbsp;hash table or binary search <br>1521 &nbsp; &nbsp; &nbsp; &nbsp;Huffman tree <br>1742 &nbsp; &nbsp; &nbsp; &nbsp;knapsack <br>2392 &nbsp; &nbsp; &nbsp; &nbsp;knapsack <br>1538 &nbsp; &nbsp; &nbsp; &nbsp;Lagrangian interpolation <br>2344 &nbsp; &nbsp; &nbsp; &nbsp;linear algebra and greedy <br>1462 &nbsp; &nbsp; &nbsp; &nbsp;linear systems <br>1914 &nbsp; &nbsp; &nbsp; &nbsp;linear systems <br>2440 &nbsp; &nbsp; &nbsp; &nbsp;matrix algebra <br>1149 &nbsp; &nbsp; &nbsp; &nbsp;maximum flow <br>1273 &nbsp; &nbsp; &nbsp; &nbsp;maximum flow <br>1459 &nbsp; &nbsp; &nbsp; &nbsp;maximum flow <br>2125 &nbsp; &nbsp; &nbsp; &nbsp;maximum flow and minimum cut <br>2377 &nbsp; &nbsp; &nbsp; &nbsp;maximum spanning tree <br>1258 &nbsp; &nbsp; &nbsp; &nbsp;minimum spanning tree <br>1679 &nbsp; &nbsp; &nbsp; &nbsp;minimum spanning tree <br>1861 &nbsp; &nbsp; &nbsp; &nbsp;minimum spanning tree <br>2421 &nbsp; &nbsp; &nbsp; &nbsp;minimum spanning tree <br>1166 &nbsp; &nbsp; &nbsp; &nbsp;modular systems <br>1222 &nbsp; &nbsp; &nbsp; &nbsp;modular systems <br>1681 &nbsp; &nbsp; &nbsp; &nbsp;modular systems <br>2345 &nbsp; &nbsp; &nbsp; &nbsp;modular systems <br>1905 &nbsp; &nbsp; &nbsp; &nbsp;Newton's iteration <br>2420 &nbsp; &nbsp; &nbsp; &nbsp;Newton's iteration <br>2299 &nbsp; &nbsp; &nbsp; &nbsp;number of inversions <br>1006 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1061 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1067 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1152 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1284 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1320 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1401 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1455 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1597 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1808 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1811 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1845 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>1995 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>2115 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>2407 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>2417 &nbsp; &nbsp; &nbsp; &nbsp;number theory <br>2429 &nbsp; &nbsp; &nbsp; &nbsp;number theory and enumeration <br>1146 &nbsp; &nbsp; &nbsp; &nbsp;permutation <br>1256 &nbsp; &nbsp; &nbsp; &nbsp;permutation <br>1731 &nbsp; &nbsp; &nbsp; &nbsp;permutation <br>1833 &nbsp; &nbsp; &nbsp; &nbsp;permutation <br>2079 &nbsp; &nbsp; &nbsp; &nbsp;rotating calipers <br>2104 &nbsp; &nbsp; &nbsp; &nbsp;search <br>1177 &nbsp; &nbsp; &nbsp; &nbsp;segment tree <br>2182 &nbsp; &nbsp; &nbsp; &nbsp;segment tree <br>2352 &nbsp; &nbsp; &nbsp; &nbsp;segment tree or binary indexed tree <br>1016 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1028 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1048 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1049 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1051 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1060 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1281 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1298 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1363 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1504 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1573 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1578 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1589 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1592 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1600 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1656 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1660 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1666 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1684 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1926 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1928 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>1978 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2014 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2039 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2050 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2051 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2081 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2271 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2317 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2339 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2340 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2359 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2383 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2410 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2424 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2443 &nbsp; &nbsp; &nbsp; &nbsp;simulation <br>2387 &nbsp; &nbsp; &nbsp; &nbsp;single source shortest paths <br>2394 &nbsp; &nbsp; &nbsp; &nbsp;single source shortest paths <br>1002 &nbsp; &nbsp; &nbsp; &nbsp;sorting <br>1245 &nbsp; &nbsp; &nbsp; &nbsp;sorting <br>1520 &nbsp; &nbsp; &nbsp; &nbsp;sorting <br>2092 &nbsp; &nbsp; &nbsp; &nbsp;sorting <br>2408 &nbsp; &nbsp; &nbsp; &nbsp;sorting <br>1007 &nbsp; &nbsp; &nbsp; &nbsp;stable sorting <br>1572 &nbsp; &nbsp; &nbsp; &nbsp;string manipulation <br>1646 &nbsp; &nbsp; &nbsp; &nbsp;string manipulation <br>1917 &nbsp; &nbsp; &nbsp; &nbsp;string manipulation <br>2406 &nbsp; &nbsp; &nbsp; &nbsp;string matching <br>1128 &nbsp; &nbsp; &nbsp; &nbsp;topological sorting <br>1785 &nbsp; &nbsp; &nbsp; &nbsp;treap <br>2201 &nbsp; &nbsp; &nbsp; &nbsp;treap <br>2255 &nbsp; &nbsp; &nbsp; &nbsp;tree manipulation <br>1089 &nbsp; &nbsp; &nbsp; &nbsp;union of intervals <br>1797 &nbsp; &nbsp; &nbsp; &nbsp;variation of Dijkstra's shortest path algorithm <br>2253 &nbsp; &nbsp; &nbsp; &nbsp;variation of Dijkstra's shortest path algorithm <br>2395 &nbsp; &nbsp; &nbsp; &nbsp;variation of Dijkstra's shortest path algorithm <br>2254 &nbsp; &nbsp; &nbsp; &nbsp;vector algebra <br>2354 &nbsp; &nbsp; &nbsp; &nbsp;vector algebra <br>2412 &nbsp; &nbsp; &nbsp; &nbsp;vector algebra <br>1130 &nbsp; &nbsp; &nbsp; &nbsp;vertex connectivity <br>1308 &nbsp; &nbsp; &nbsp; &nbsp;vertex connectivity <br>2320 &nbsp; &nbsp; &nbsp; &nbsp;vertex connectivity&nbsp; <br></p><img src ="http://www.cppblog.com/wolf5x/aggbug/88196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-06-20 22:30 <a href="http://www.cppblog.com/wolf5x/archive/2009/06/20/88196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2486 Apple Tree 树形DP+背包DP</title><link>http://www.cppblog.com/wolf5x/archive/2009/06/03/86648.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Wed, 03 Jun 2009 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/06/03/86648.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/86648.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/06/03/86648.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/86648.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/86648.html</trackback:ping><description><![CDATA[<a  href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2486">http://acm.pku.edu.cn/JudgeOnline/problem?id=2486</a><br>题目给定一棵有N个节点的无向树，每个节点有个权值，当第一次到达某节点时，可以获得该权值。从节点1出发，至多走K步，每步能走到当前节点的任意邻接点，要求能获得的权值和的最大值。N&lt;=100，K&lt;=200。<br><br>对DFS树中某节点，从它开始，可以进入任意子树获得一定权值后返回该点，也可以不返回（这意味着终止于子树里）。<br>这样可以设：<br>dp[i][j][0]: 以i为根, 以至多j步访问该子树并返回原地的最大收获<br>dp[i][j][1]: 以i为根, 以至多j步访问该子树且不需要返回时的最大收获<br>那么，dp[1][K][1]就是最终结果。<br>显然这两个值的更新过程可以用深搜DP。<br><br>考虑以r为根的DFS子树，则dp[r][j][0..1]的更新，实际上是以步数j为背包容量，以所有子树为物品的背包问题。<br>于是可以再设：<br>dps[i][j][0]：前i棵子树，最大步数j，需要返回时的最大收获<br>dps[i][j][1]：前i棵子树，最大步数j，不需要返回时的最大收获<br>DFS完一棵子树就做一次背包，状态复杂度O(K*子树数），转移复杂度O(K)<br>整体复杂度为O(N*K^2)<br><br>代码如下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%; font-family: courier new;"><!--<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: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstdio</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstdlib</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstring</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cmath</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;EDGE{<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;v,e;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">}edg[</span><span style="color: #000000;">330</span><span style="color: #000000;">];<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;se,&nbsp;gg[</span><span style="color: #000000;">110</span><span style="color: #000000;">];<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;vis[</span><span style="color: #000000;">110</span><span style="color: #000000;">];<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;w[</span><span style="color: #000000;">110</span><span style="color: #000000;">],dp[</span><span style="color: #000000;">110</span><span style="color: #000000;">][</span><span style="color: #000000;">220</span><span style="color: #000000;">][</span><span style="color: #000000;">2</span><span style="color: #000000;">];<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N,K;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">inline&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;addedge(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;u,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;v){<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;edg[se].v&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;v;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;edg[se].e&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;gg[u];<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;gg[u]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;se</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;input(){<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">N,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">K)</span><span style="color: #000000;">==</span><span style="color: #000000;">EOF)<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;se&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(gg,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(gg));<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">w[i]);<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">j,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">k);<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(j,k);<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(k,j);<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;dfs(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r){<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k,u,v,e;<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mx0,&nbsp;mx1;<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;vis[r]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(e</span><span style="color: #000000;">=</span><span style="color: #000000;">gg[r];&nbsp;e</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;e</span><span style="color: #000000;">=</span><span style="color: #000000;">edg[e].e){<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;edg[e].v;<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">vis[u]){<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(u);<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(k</span><span style="color: #000000;">=</span><span style="color: #000000;">K;&nbsp;k</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;k</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx0&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mx1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;w[r];<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">k</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(k</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">k</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">){<br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx0&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(mx0,&nbsp;dp[r][j][</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">+</span><span style="color: #000000;">dp[u][k</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">-</span><span style="color: #000000;">j][</span><span style="color: #000000;">0</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(mx1,&nbsp;dp[r][j][</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">+</span><span style="color: #000000;">dp[u][k</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">-</span><span style="color: #000000;">j][</span><span style="color: #000000;">0</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(k</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">k</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">){<br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(mx1,&nbsp;dp[r][j][</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">+</span><span style="color: #000000;">dp[u][k</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">-</span><span style="color: #000000;">j][</span><span style="color: #000000;">1</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[r][k][</span><span style="color: #000000;">0</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(dp[r][k][</span><span style="color: #000000;">0</span><span style="color: #000000;">],&nbsp;mx0);<br></span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[r][k][</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(dp[r][k][</span><span style="color: #000000;">1</span><span style="color: #000000;">],&nbsp;mx1);<br></span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;solve(){<br></span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k;<br></span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">K;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j][</span><span style="color: #000000;">0</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dp[i][j][</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;w[i];<br></span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(vis));<br></span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;dfs(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;max(dp[</span><span style="color: #000000;">1</span><span style="color: #000000;">][K][</span><span style="color: #000000;">0</span><span style="color: #000000;">],dp[</span><span style="color: #000000;">1</span><span style="color: #000000;">][K][</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;);<br></span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">73</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(){<br></span><span style="color: #008080;">74</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(input()){<br></span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br></span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">&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></span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;">}</span></div>
<br><br><img src ="http://www.cppblog.com/wolf5x/aggbug/86648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-06-03 13:09 <a href="http://www.cppblog.com/wolf5x/archive/2009/06/03/86648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>北大校赛A(grids 3741) Escape</title><link>http://www.cppblog.com/wolf5x/archive/2009/05/18/83304.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Mon, 18 May 2009 10:33:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/05/18/83304.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/83304.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/05/18/83304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/83304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/83304.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 12pt"><span style="FONT-FAMILY: courier new">grids 3741 Escape </span><br style="FONT-FAMILY: courier new"><a style="FONT-FAMILY: courier new" href="http://poj.grids.cn/problem?id=3741">http://poj.grids.cn/problem?id=3741</a><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">此题我用组合数学过的. 欢迎交流各种方法.</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">原题意: 从(0,0)开始,初始面向y轴正方向,只能右转或直走,每个格子至多经过1次,到达(x,y),求有多少种走法</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">转化为: 从(x,y)开始,初始朝向任意,只能左转或直走,!@#%^$#$^^$@%,到达(0,0)的走法数</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">总的走法数即为初始朝向分别为上下左右的走法数之和.</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">观察符合要求的路径,其肯定是螺旋形的,也就是各边不相交.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">所以可以分别设 (x,y)上方横线数up, 下方横线数down, 左侧竖线数left, 右侧竖线数right</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">按初始朝向分4种情况,可以找出up,down,left,right之间的数量关系! 可以自己画一下,很容易发现.</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">以初始朝向左为例,求 S左:</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">left-1 = up = right = down (令其 = k)</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">这样对某个k ,走法数即为在4个方位取出对应数量线段的方法数.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">设(x,y)到地图4个边界的距离分别为 dl, du, dr, dd</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">则 Sk = C(left-1, dl-1) * C(up, du) * C(right, dr) * C(down, dd)</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">其中left项的上下标都减了1,是因为左侧竖线肯定有一条是y轴,所以只选出剩下的left-1条</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">枚举所有不会越界的 k ,即保证 C(k, n) 中 k&lt;=n, 就求得这个方向方法数之和</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">最后把4个方向的S加起来即可</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">注意一些特殊情况:</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">1. (x,y)在 y 轴上时,直接输出1</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">2. 初始方向为下的情况,枚举k要从1开始,也就是至少要绕一圈. 因为 !%!@^$#$@#$ :)</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">ps.</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">初始朝向 上: left-1 = up-1 = right = down</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">初始朝向 右: left-1 = up-1 = right-1 = down</span><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">初始朝向 下: left = up = right = down</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: courier new">代码:</span><br style="FONT-FAMILY: courier new"><br style="FONT-FAMILY: courier new">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; 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: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdio</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;__int64&nbsp;MOD&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100000007</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">__int64&nbsp;x,y,X,Y,c[</span><span style="COLOR: #000000">2100</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">2100</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">__int64&nbsp;ans,tmp;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dk[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">lurd</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">left</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">up</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">right</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">down</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;N;<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">__int64&nbsp;func(__int64&nbsp;n,&nbsp;__int64&nbsp;k){<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">k)&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></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(c[n][k]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[n][k]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(func(n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;func(n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;k))&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;MOD;<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;c[n][k];<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;mi4(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x2,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x3,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x4){<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;min(min(x1,x2),min(x3,x4));<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k,z;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;left,right,up,down;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(c,&nbsp;</span><span style="COLOR: #000000">0xff</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(c));<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;c[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[i][i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N);<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(N</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%I64d&nbsp;%I64d&nbsp;%I64d&nbsp;%I64d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">X,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Y,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">y);<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x;&nbsp;right&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;X</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x;<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y;&nbsp;down&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;y;<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(x&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mi4(left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;up</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],&nbsp;down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">z;&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;func(left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;MOD;<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(tmp&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;func(up,&nbsp;k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]))&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;MOD;<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(tmp&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;func(right,&nbsp;k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]))&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;MOD;<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(tmp&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;func(down,&nbsp;k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dk[i][</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]))&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;MOD;<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(ans&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;tmp)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;MOD;<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%I64d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #000000">&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></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br style="FONT-FAMILY: courier new"><br></span>
<img src ="http://www.cppblog.com/wolf5x/aggbug/83304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-05-18 18:33 <a href="http://www.cppblog.com/wolf5x/archive/2009/05/18/83304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2679 Adventurous Driving (Bellman-Ford, SPFA)</title><link>http://www.cppblog.com/wolf5x/archive/2009/05/06/82024.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Wed, 06 May 2009 03:17:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/05/06/82024.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/82024.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/05/06/82024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/82024.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/82024.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 求所谓的 optimal path:对某个顶点,只能沿着它所有出边中weight最小的那些路走;从起点到终点的总weight最小;如果有weight相同的,取总length最短的.可能有负环,自环,平行边.先将不符合要求的边删掉.接着,关键在于如何判断有效负环,即该负环处在起点到终点的路上.实际上,只用保留原图中从起点能到达,并且能到达终点的顶点.如果用标准bellman-ford,需要2次D...&nbsp;&nbsp;<a href='http://www.cppblog.com/wolf5x/archive/2009/05/06/82024.html'>阅读全文</a><img src ="http://www.cppblog.com/wolf5x/aggbug/82024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-05-06 11:17 <a href="http://www.cppblog.com/wolf5x/archive/2009/05/06/82024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 1005 用mod的循环性质</title><link>http://www.cppblog.com/wolf5x/archive/2009/04/25/81028.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Sat, 25 Apr 2009 03:55:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/04/25/81028.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/81028.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/04/25/81028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/81028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/81028.html</trackback:ping><description><![CDATA[<a href="http://acm.hdu.edu.cn/showproblem.php?pid=1005"><span style="FONT-FAMILY: Times New Roman">http://acm.hdu.edu.cn/showproblem.php?pid=1005</span></a><br><span style="FONT-FAMILY: Times New Roman">A number sequence is defined as follows:<br>f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.<br>Given A, B, and n, you are to calculate the value of f(n).<br>1 &lt;= A, B &lt;= 1000, 1 &lt;= n &lt;= 100,000,000<br><br>解:<br>f(n) = (A * f(n - 1) + B * f(n - 2)) %7<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (A * f(n - 1) %7 + B * f(n - 2) %7) %7<br>所以对于给定的A和B,可以先打表,找出数列的循环部分. 鸽巢原理知,状态总数不会超过7*7<br>注意循环节不一定从f(3)开始...<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,b,n,x,y,l,h,m[</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">],q[</span><span style="COLOR: #000000">300</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_86_575_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_575_Open_Text.style.display='none'; Codehighlighter1_86_575_Closed_Image.style.display='inline'; Codehighlighter1_86_575_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_86_575_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_575_Closed_Text.style.display='none'; Codehighlighter1_86_575_Open_Image.style.display='inline'; Codehighlighter1_86_575_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span id=Codehighlighter1_86_575_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_86_575_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_141_559_Open_Image onclick="this.style.display='none'; Codehighlighter1_141_559_Open_Text.style.display='none'; Codehighlighter1_141_559_Closed_Image.style.display='inline'; Codehighlighter1_141_559_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_141_559_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_141_559_Closed_Text.style.display='none'; Codehighlighter1_141_559_Open_Image.style.display='inline'; Codehighlighter1_141_559_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">EOF&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">n))</span><span id=Codehighlighter1_141_559_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_141_559_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(m,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(m));<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;q[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;l</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_250_375_Open_Image onclick="this.style.display='none'; Codehighlighter1_250_375_Open_Text.style.display='none'; Codehighlighter1_250_375_Closed_Image.style.display='inline'; Codehighlighter1_250_375_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_250_375_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_250_375_Closed_Text.style.display='none'; Codehighlighter1_250_375_Open_Image.style.display='inline'; Codehighlighter1_250_375_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(m[x][y]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_250_375_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_250_375_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">该状态还未经历过,则扩展</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[l]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[x][y]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;l;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;q[l</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此时,q[1<img src="http://www.cppblog.com/Images/dot.gif">h-1]为前面的非循环部分<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">q[h<img src="http://www.cppblog.com/Images/dot.gif">l-1]为循环节</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m[x][y];&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">循环节的起始位置</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">h)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,q[n]);<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,q[((n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">h)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">(l</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">h))</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">h]);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br></span>
<img src ="http://www.cppblog.com/wolf5x/aggbug/81028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-04-25 11:55 <a href="http://www.cppblog.com/wolf5x/archive/2009/04/25/81028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bnu 1069 按位贪心,二的幂次</title><link>http://www.cppblog.com/wolf5x/archive/2009/04/25/81026.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Sat, 25 Apr 2009 03:44:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/04/25/81026.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/81026.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/04/25/81026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/81026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/81026.html</trackback:ping><description><![CDATA[<a href="http://acm.cist.bnu.edu.cn/contest/problem_show.php?pid=1069">http://acm.cist.bnu.edu.cn/contest/problem_show.php?pid=1069</a><br><br>给一些物品,虚拟币价格v[i]=2^(ki-1),实际价值w[i].现给S个虚拟币.要求把这些虚拟币恰好花完,并且购得物品的实际价值总和最大.<br><br>显然,可行的购买方案必能将所购物品分成若干组,其中每组的总价格为2^(pi-1),其中pi为S的二进制表示为1的所有位.<br><br>因此可以按位贪心,从S的最低位开始.设当前处理第k位:<br>1.选取剩余物品价格为2^(k-1)中价值最大的那个,如果没有价格为2^(k-1)的物品,则表示任务无法达成.<br>2.将其它价格为2^(k-1)的物品,按价值从大到小排序,相邻两个合并成价格为2^k的物品,累积到下一阶段.<br><br>这里挖掘出的贪心性质为: 一个数第k位的1,只能由不高于第k位的1合成得到.<br><br>
<img src ="http://www.cppblog.com/wolf5x/aggbug/81026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-04-25 11:44 <a href="http://www.cppblog.com/wolf5x/archive/2009/04/25/81026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 1276 Cash Machine 以2的幂次为基底表示整数</title><link>http://www.cppblog.com/wolf5x/archive/2009/04/11/79585.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Sat, 11 Apr 2009 05:21:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/04/11/79585.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/79585.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/04/11/79585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/79585.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/79585.html</trackback:ping><description><![CDATA[<a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1276">http://acm.pku.edu.cn/JudgeOnline/problem?id=1276</a><br>题目大意是:<br>给定N种面值分别为d[k]的钞票,数量分别为n[k]张.再给一个整数cash.<br>求,用这些钞票能表示出的不大于cash的最大值是多少.<br>数据范围N&lt;=1000, n[k]&lt;=1000, cash&lt;=100000<br><br>最简单的DP思路是大背包.把每一张钞票看成一件物品,把cash看成背包容量.<br>这样的复杂度是O(sigma(n[k])*cash),上限是10^11,显然难以应付1000ms的时限.<br><br>此处便需利用一个整数的性质来压缩钞票数:<br>易知,1,2,4,...,2^(k-1)这些数的线性组合,可以表示出任意小于2^k的正整数.<br>所以如果n[i]=2^k-1,那么实际上钞票k,就可以转化为分别用系数(1,2,4,...,2^k-1)去乘d[k]而得到的钞票各一张.<br>如果n[i]!=2^k-1,只需取系数1,2,4,..,2^(k-1),n[i]-(2^k-1),其中k是使2^k-1&lt;=n[i]的最大整数.<br><br>代码如下:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; 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: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dp[</span><span style="COLOR: #000000">100010</span><span style="COLOR: #000000">],mark;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sn,cash;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;BILL{<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,d;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">}b[</span><span style="COLOR: #000000">1010</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ans;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;go_dp(){<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,k,upb,r,s;<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;dp[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">mark;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sn;&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">系数:2的幂次</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(b[k].n</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((r</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">b[k].n){<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b[k].n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(r</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[k].n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b[k].d;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新钞票的面值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upb</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">min(ans</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">s,cash);<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">upb;&nbsp;i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">s;&nbsp;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dp[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">s]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">mark){<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">mark;<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ans</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">i)&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">&lt;&lt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ans</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">cash)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k;<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mark</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">cash,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">sn)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">EOF){<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;mark</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sn;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b[i].n,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b[i].d);<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">b[i].n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b[i].d;<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ans</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">cash)<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;go_dp();<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">&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></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br>另,在网上搜得另一种思路,开bool数组记录每个总额是否能达到,开个2维数组记录达到相应总额每种钞票使用数<br>个人以为,这种方法不能保证总得到最优解.考察如下的例子:<br>cash=3*4*5=60<br>钞票(面值*张数):3*19,4*14,5*11<br>假设55的方案恰好是5*11,56的方案恰好是4*14,57的方案恰好是3*19,那么在考虑60时就找不到解了.实际上60是可以达到的.<br><br><br><br><br><br>
<img src ="http://www.cppblog.com/wolf5x/aggbug/79585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-04-11 13:21 <a href="http://www.cppblog.com/wolf5x/archive/2009/04/11/79585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tju 3214 floyd变种</title><link>http://www.cppblog.com/wolf5x/archive/2009/03/31/78460.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Tue, 31 Mar 2009 06:39:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/03/31/78460.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/78460.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/03/31/78460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/78460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/78460.html</trackback:ping><description><![CDATA[<p>最近做了两道floyd变种的题目,又加深了对floyd原理的理解.</p>
<p>第2题: tju 3214 Find the Path<br><a href="http://acm.tju.edu.cn/toj/showp3214.html">http://acm.tju.edu.cn/toj/showp3214.html</a></p>
<p>题目大意是给一个无向图,每个结点有个点权c[p]<br>对于查询的点对i,j和权k,求在中间节点(不包含端点i,j)权值不大于k的限制下,i,j间最短路径.<br>由于查询次数多,因此一次查询复杂度需要在O(logn)以内.考虑计算出所有点对在所有限制条件下的最短路,O(1)查询.<br>限制条件不作用于端点i,j,正好可以用floyd解决.因为floyd正是不断向中间点集中加入点.只要限制一下这些被加入点的条件,就可以解决这题了.<br>初步归纳,对于查询i,j,k,应该输出将所有c[p]&lt;=k的点加入后的floyd[i,j]<br>对于限制k,点集的情况是:加了权最小的m个(0&lt;=m&lt;=N),这些点的权都不超过k<br>因此将点按权值升序排列.dist[k][i][j]表示:前k个点被加入后,i,j间的最短路.</p>
<p>代码如下:<br>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;T,N,M,Q,pc[</span><span style="COLOR: #000000">210</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;C[</span><span style="COLOR: #000000">210</span><span style="COLOR: #000000">],dist[</span><span style="COLOR: #000000">210</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">210</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">210</span><span style="COLOR: #000000">];&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_119_145_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_145_Open_Text.style.display='none'; Codehighlighter1_119_145_Closed_Image.style.display='inline'; Codehighlighter1_119_145_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_119_145_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_145_Closed_Text.style.display='none'; Codehighlighter1_119_145_Open_Image.style.display='inline'; Codehighlighter1_119_145_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;mycmp(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)</span><span id=Codehighlighter1_119_145_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_119_145_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(C[a]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C[b]);<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_157_1674_Open_Image onclick="this.style.display='none'; Codehighlighter1_157_1674_Open_Text.style.display='none'; Codehighlighter1_157_1674_Closed_Image.style.display='inline'; Codehighlighter1_157_1674_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_157_1674_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_157_1674_Closed_Text.style.display='none'; Codehighlighter1_157_1674_Open_Image.style.display='inline'; Codehighlighter1_157_1674_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span id=Codehighlighter1_157_1674_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_157_1674_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k,p,a,b,c;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">T);<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_216_1658_Open_Image onclick="this.style.display='none'; Codehighlighter1_216_1658_Open_Text.style.display='none'; Codehighlighter1_216_1658_Closed_Image.style.display='inline'; Codehighlighter1_216_1658_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_216_1658_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_216_1658_Closed_Text.style.display='none'; Codehighlighter1_216_1658_Open_Image.style.display='inline'; Codehighlighter1_216_1658_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(T</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_216_1658_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_216_1658_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,</span><span style="COLOR: #000000">0xff</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(dist));<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">M);<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[pc[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_335_397_Open_Image onclick="this.style.display='none'; Codehighlighter1_335_397_Open_Text.style.display='none'; Codehighlighter1_335_397_Closed_Image.style.display='inline'; Codehighlighter1_335_397_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_335_397_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_335_397_Closed_Text.style.display='none'; Codehighlighter1_335_397_Open_Image.style.display='inline'; Codehighlighter1_335_397_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_335_397_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_335_397_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">C[i]);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(pc,pc</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">N</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,mycmp);<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_457_571_Open_Image onclick="this.style.display='none'; Codehighlighter1_457_571_Open_Text.style.display='none'; Codehighlighter1_457_571_Closed_Image.style.display='inline'; Codehighlighter1_457_571_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_457_571_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_457_571_Closed_Text.style.display='none'; Codehighlighter1_457_571_Open_Image.style.display='inline'; Codehighlighter1_457_571_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">M;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_457_571_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_457_571_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">][a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">][b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">floyd</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img id=Codehighlighter1_616_1405_Open_Image onclick="this.style.display='none'; Codehighlighter1_616_1405_Open_Text.style.display='none'; Codehighlighter1_616_1405_Closed_Image.style.display='inline'; Codehighlighter1_616_1405_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_616_1405_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_616_1405_Closed_Text.style.display='none'; Codehighlighter1_616_1405_Open_Image.style.display='inline'; Codehighlighter1_616_1405_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_616_1405_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_616_1405_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pc[k];<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_670_1387_Open_Image onclick="this.style.display='none'; Codehighlighter1_670_1387_Open_Text.style.display='none'; Codehighlighter1_670_1387_Closed_Image.style.display='inline'; Codehighlighter1_670_1387_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_670_1387_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_670_1387_Closed_Text.style.display='none'; Codehighlighter1_670_1387_Open_Image.style.display='inline'; Codehighlighter1_670_1387_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_670_1387_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_670_1387_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_707_1373_Open_Image onclick="this.style.display='none'; Codehighlighter1_707_1373_Open_Text.style.display='none'; Codehighlighter1_707_1373_Closed_Image.style.display='inline'; Codehighlighter1_707_1373_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_707_1373_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_707_1373_Closed_Text.style.display='none'; Codehighlighter1_707_1373_Open_Image.style.display='inline'; Codehighlighter1_707_1373_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_707_1373_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_707_1373_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dist[k][i][j]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[k][i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i][j];<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i][j]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[k][i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">min(dist[k][i][j],dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i][j]);<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img id=Codehighlighter1_1023_1288_Open_Image onclick="this.style.display='none'; Codehighlighter1_1023_1288_Open_Text.style.display='none'; Codehighlighter1_1023_1288_Closed_Image.style.display='inline'; Codehighlighter1_1023_1288_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1023_1288_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1023_1288_Closed_Text.style.display='none'; Codehighlighter1_1023_1288_Open_Image.style.display='inline'; Codehighlighter1_1023_1288_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">j&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i][p]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][p][j]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1023_1288_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1023_1288_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dist[k][i][j]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[k][i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i][p]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][p][j];<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[k][i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">min(dist[k][i][j],&nbsp;dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i][p]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dist[k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][p][j]);<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">printf("%d,%d,%d(%d)&nbsp;",k,i,j,dist[k][i][j]);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">query</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Q);<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img id=Codehighlighter1_1465_1629_Open_Image onclick="this.style.display='none'; Codehighlighter1_1465_1629_Open_Text.style.display='none'; Codehighlighter1_1465_1629_Closed_Image.style.display='inline'; Codehighlighter1_1465_1629_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1465_1629_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1465_1629_Closed_Text.style.display='none'; Codehighlighter1_1465_1629_Open_Image.style.display='inline'; Codehighlighter1_1465_1629_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(Q</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1465_1629_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1465_1629_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c);<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">顺序查找</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">50</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;C[pc[i]]</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">c;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,dist[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/wolf5x/aggbug/78460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-03-31 14:39 <a href="http://www.cppblog.com/wolf5x/archive/2009/03/31/78460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bupt 1460 floyd变种</title><link>http://www.cppblog.com/wolf5x/archive/2009/03/31/78459.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Tue, 31 Mar 2009 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/03/31/78459.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/78459.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/03/31/78459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/78459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/78459.html</trackback:ping><description><![CDATA[最近做了两道floyd变种的题目,又加深了对floyd原理的理解.<br><br>第1题: bupt 1460 游览路线<br><a href="http://acm.cs.bupt.cn/onlinejudge/showproblem.php?problem_id=1460">http://acm.cs.bupt.cn/onlinejudge/showproblem.php?problem_id=1460</a><br>大意是给定一个无向图,找出一个环,使得环的长度最短,并且这个环上至少有3个顶点.<br><br>一种O(mn^2)的做法是枚举每条边&lt;u,v&gt;,用dijkstra求由原图删去这条边后的新图中u,v间最短路径dist[u,v],该环长度即为map[u,v]+dist[u,v].输出环长度值最小的那个.<br><br>仔细分析知道,这题实际上是要求每对点u,v间不包含边&lt;u,v&gt;的最短路径.想到floyd正是计算所有点对最短路径的.但是这里不能包含边&lt;u,v&gt;的条件就是变化所在.<br><br>floyd的原理是依次往"中间点集"中加入点k,再更新任意点对dist[i,j].<br>此题中,如果直接枚举map[i,k]+map[k,j]+floyd[i,j](floyd[i,j]为使用经典算法得到的两点间最短路),有可能出现一个点经过两次的情况.比如由边集{(1,2),(1,3),(1,4)}构成的图,依题意是无解,但是用错误的枚举方法却有解.原因是没有排除(1-&gt;2),(2-&gt;1-&gt;3),(3-&gt;1)的情况.此时可以看出,以点k为原点枚举i,j时的floyd[i,j]应该是保证不经过k的,也就是枚举操作应该在往"中间点集"中加入k之前!<br>这样可以得出算法的大致轮廓:在加入点k前更新dist[i,j]<br>但是问题是,此时的中间点只有1..k-1,那后面的点k+1..n会不会漏处理呢?<br>本质上,这题求的是环的长度,而不是路径长度.因此,假如存在一个更短的环,它路径上有k之后的点p1,p2,...,pm,设其中最后处理的那个点是pl.那么这个环一定会在向中间点集中加入pl的那次循环里枚举到.<br>因此不存在漏解问题.<br><br>代码如下:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; 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: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;N,M,ans;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">w是原图矩阵,d是floyd最短路矩阵</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;w[</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">],d[</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k,a,b,c;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">M)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">EOF){<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">M;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c);<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">w[a][b]</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">w[a][b]){<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[a][b]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">w[b][a]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[a][b]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[b][a]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0x7fffffff</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">先枚举map[i,k]+map[k,j]+floyd[i,j]</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">k;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">k;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(w[i][k]</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">w[k][j]</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">d[i][j])<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">min(ans,d[i][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">w[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">w[k][j]);<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">再向中间点集中加入k并更新floyd矩阵</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">d[i][k])</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">d[k][j]</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">j)</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">d[i][j]</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">d[i][j]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">d[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[k][j])<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[k][j];<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ans</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0x7fffffff</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">No&nbsp;solution.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&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></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br><br>
<img src ="http://www.cppblog.com/wolf5x/aggbug/78459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-03-31 14:20 <a href="http://www.cppblog.com/wolf5x/archive/2009/03/31/78459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bupt 1032 最长不减序列</title><link>http://www.cppblog.com/wolf5x/archive/2009/03/27/78028.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Fri, 27 Mar 2009 05:23:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/03/27/78028.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/78028.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/03/27/78028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/78028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/78028.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;bupt&nbsp;1032<br>&nbsp;&nbsp;&nbsp;&nbsp;nlogn&nbsp;LIS<br>&nbsp;&nbsp;&nbsp;&nbsp;注意!<br>&nbsp;&nbsp;&nbsp;&nbsp;是最长不减序列(*1),而非最长升序列(*2)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;则当t&gt;=D[len]就直接更新len+1<br>&nbsp;&nbsp;&nbsp;&nbsp;而t&lt;D[len]时,应在D[1..len]中查找最大的j,满足D[j]&lt;=A[t](在*2中,是满足D[j]&lt;A[t]),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;将t接在D[j]后得到更长的不减序列,同时更新D[j+1]=t<br>&nbsp;&nbsp;&nbsp;&nbsp;这是我WA很多次的地方.对这个算法未理解透彻&nbsp;<br>&nbsp;&nbsp;&nbsp; 附一组原先错误程序WA的数据:<br>40<br>9&nbsp;7&nbsp;10&nbsp;13&nbsp;18&nbsp;4&nbsp;13&nbsp;37&nbsp;24&nbsp;7&nbsp;30&nbsp;17&nbsp;36&nbsp;20&nbsp;23&nbsp;26&nbsp;35&nbsp;16&nbsp;7&nbsp;25&nbsp;7&nbsp;30&nbsp;39&nbsp;3&nbsp;9&nbsp;11&nbsp;14&nbsp;8&nbsp;29&nbsp;35&nbsp;35&nbsp;17&nbsp;6&nbsp;11&nbsp;25&nbsp;25&nbsp;21&nbsp;17&nbsp;32&nbsp;38&nbsp; <br>答案12<br></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;T,N,m,cnt,r[</span><span style="color: #000000;">50010</span><span style="color: #000000;">];<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,k;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">T);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(T</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">N);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;r[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">=-</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">N;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(m</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">r[cnt]){&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">not&nbsp;'&gt;'</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[</span><span style="color: #000000;">++</span><span style="color: #000000;">cnt]</span><span style="color: #000000;">=</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;bl</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">,bh</span><span style="color: #000000;">=</span><span style="color: #000000;">cnt,bm;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000;">=-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(bl</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">bh){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bm</span><span style="color: #000000;">=</span><span style="color: #000000;">(bl</span><span style="color: #000000;">+</span><span style="color: #000000;">bh)</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(r[bm]</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">m){&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">not&nbsp;'&gt;='&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bh</span><span style="color: #000000;">=</span><span style="color: #000000;">bm</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000;">=</span><span style="color: #000000;">bm;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;bl</span><span style="color: #000000;">=</span><span style="color: #000000;">bm</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[k]</span><span style="color: #000000;">=</span><span style="color: #000000;">m;<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;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,cnt);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<br> <img src ="http://www.cppblog.com/wolf5x/aggbug/78028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-03-27 13:23 <a href="http://www.cppblog.com/wolf5x/archive/2009/03/27/78028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bupt 1379 Ceil 计算大数的ceil(n/2)</title><link>http://www.cppblog.com/wolf5x/archive/2009/03/25/77884.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Wed, 25 Mar 2009 14:52:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/03/25/77884.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/77884.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/03/25/77884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/77884.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/77884.html</trackback:ping><description><![CDATA[<p><a href="http://acm.cs.bupt.cn/onlinejudge/showproblem.php?problem_id=1379">http://acm.cs.bupt.cn/onlinejudge/showproblem.php?problem_id=1379</a></p>
<p>给一个长度10MB的大数n,要求计算ceil(n/2),内存只有1000K,显然不能开数组,要边读边除<br>通常的除法只要设个变量记录每位是否整除(mod).此外题目要求不输出前导0,再设个bool值记录(zero)<br>特殊之处在于向上取整.举个例子:1999/2=1000,显然直接除一位输出一位有问题<br>关键之处在于增加一个变量记录连续的9的个数(cnt9).如果处理到非9的位,或者输入文件结束,就分情况输出前面最近一位非9数除的结果,然后循环输出9除的结果.因此,还要一个变量记录上一位除得的商(co)<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; 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: #008000">/*</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;记录连续9的个数,为了使输入末尾有连续9时向上取整<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;co记录上位除的商<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;mod记录上位除的余数<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;cnt9记录连续的9的个数<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;zero记录前导是否为0&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;当前位不是9时,输出之前的结果,并将当前位+mod*5存入co<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;当前位是9时,cnt9++<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;输入结束时,处理末尾几位&nbsp;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;注意:<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入为0时<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以9开头时<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以x9开头时&nbsp;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;几组数据:&nbsp;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;000319900099&nbsp;159950050<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;199&nbsp;100<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;0199&nbsp;100<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;1998&nbsp;999<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;50<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;0<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;zero;<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;mod,cnt9;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;co,cn,ct;<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;zero</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;mod</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;co</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;cnt9</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(isdigit(cn</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getchar())){<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cn</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cn</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">zero</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">co){<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar(co</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cnt9)zero</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(cnt9</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">mod</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt9</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;co</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(cn</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">mod;<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cn</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt9</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">zero</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">co</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">mod){<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar(co</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">mod</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mod</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">mod;<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cnt9)zero</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(cnt9</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">mod</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输入0的情况!</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(zero)putchar(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;putchar(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000">&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></span><span style="COLOR: #008080">64</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">65</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br>
<img src ="http://www.cppblog.com/wolf5x/aggbug/77884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-03-25 22:52 <a href="http://www.cppblog.com/wolf5x/archive/2009/03/25/77884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2195 Going Home 标准的二分图带权匹配 KM算法</title><link>http://www.cppblog.com/wolf5x/archive/2009/02/15/73896.html</link><dc:creator>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</dc:creator><author>&lt;A href="mailto:wolf5x1016@gmail.com"&gt;wolf5x&lt;/A&gt;</author><pubDate>Sun, 15 Feb 2009 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/wolf5x/archive/2009/02/15/73896.html</guid><wfw:comment>http://www.cppblog.com/wolf5x/comments/73896.html</wfw:comment><comments>http://www.cppblog.com/wolf5x/archive/2009/02/15/73896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wolf5x/comments/commentRss/73896.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wolf5x/services/trackbacks/73896.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: BFS实现，O(n^3)Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;1&nbsp;#include&nbsp;&lt;iostream&gt;&nbsp;&nbsp;2&nbsp;using&nbsp;namespace...&nbsp;&nbsp;<a href='http://www.cppblog.com/wolf5x/archive/2009/02/15/73896.html'>阅读全文</a><img src ="http://www.cppblog.com/wolf5x/aggbug/73896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wolf5x/" target="_blank"><A href="mailto:wolf5x1016@gmail.com">wolf5x</A></a> 2009-02-15 22:10 <a href="http://www.cppblog.com/wolf5x/archive/2009/02/15/73896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>