﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-第七天堂-文章分类-网络流</title><link>http://www.cppblog.com/lvlawliet/category/17926.html</link><description>VIM</description><language>zh-cn</language><lastBuildDate>Tue, 18 Oct 2011 19:58:26 GMT</lastBuildDate><pubDate>Tue, 18 Oct 2011 19:58:26 GMT</pubDate><ttl>60</ttl><item><title>JOJ2726:PLAN</title><link>http://www.cppblog.com/lvlawliet/articles/158402.html</link><dc:creator>LLawliet</dc:creator><author>LLawliet</author><pubDate>Sat, 15 Oct 2011 14:20:00 GMT</pubDate><guid>http://www.cppblog.com/lvlawliet/articles/158402.html</guid><wfw:comment>http://www.cppblog.com/lvlawliet/comments/158402.html</wfw:comment><comments>http://www.cppblog.com/lvlawliet/articles/158402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lvlawliet/comments/commentRss/158402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lvlawliet/services/trackbacks/158402.html</trackback:ping><description><![CDATA[<div><div><div><div>2726 Plan</div><div>FJ has two same house for rant. Now he has n (1 &#8804; n &#8804; 1000) piece of order, the orders are&nbsp;</div><div>given in the form:&nbsp;</div><div>s t v</div><div>means that someone want to rant a house from the day s to t paying v yuan totally (including&nbsp;</div><div>the day s and t, 0 &#8804; s &#8804; t &#8804; 400, 0 &#8804; v &#8804; 100,0000).&nbsp;</div><div>A hours can be only rant to one person, and FJ should either accept an order totally or reject it.&nbsp;</div><div>Input</div><div>The first line of input file is a single integer T - The number of test cases. For each test case,&nbsp;</div><div>the first line is a single integer n then there n lines, each line gives an order</div><div>Output</div><div>For each data set, print a single line containing an integer, the maximum total income for the&nbsp;</div><div>data set</div><div>Sample Input</div><div>3</div><div>4</div><div>1 2 10</div><div>2 3 10</div><div>3 3 10</div><div>1 3 10</div><div>6</div><div>1 20 1000</div><div>3 25 10000</div><div>5 15 5000</div><div>22 300 5500</div><div>10 295 9000</div><div>7 7 6000</div><div>8</div><div>32 251 2261</div><div>123 281 1339</div><div>211 235 5641</div><div>162 217 72736</div><div>22 139 7851</div><div>194 198 9190</div><div>119 274 878</div><div>122 173 8640</div><div>Sample Output</div><div>30</div><div>25500</div><div>38595<br /><br /><br /><br />唐牛春季网络流专场的一道题，今天做了一下。<br />发现最小费用流就能搞定，定义完数组发现如果以order为点肯定超时了，所以re看了一下题，发现t的范围很小，都是整数，所以果断改图，把每秒作为点就OK了。<br />建图方法：相邻两个点（t，t + 1）连线，流量是2，费用是0，对于每一个order，s + 1和t + 2连线（t + 2多加1是因为防止有起始点与它相同，出现流错误）流量为1，费用为-c，在这个图上做一边最小费用流就行了。<br />SPFA很犀利，不过极限数据还是跑不进0.00s.....<br />代码：<br /><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 1085px; word-break: break-all; "><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 />#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: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;min(a,&nbsp;b)&nbsp;(a&nbsp;&gt;&nbsp;b&nbsp;?&nbsp;b&nbsp;:&nbsp;a)</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">using</span>&nbsp;<span style="color: #0000ff; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /><br /></span><span style="color: #0000ff; ">const</span>&nbsp;<span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;maxn&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">405</span><span style="color: #000000; ">;<br /></span><span style="color: #0000ff; ">const</span>&nbsp;<span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;maxm&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">3300</span><span style="color: #000000; ">;<br /></span><span style="color: #0000ff; ">const</span>&nbsp;<span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;inf&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">1</span>&nbsp;<span style="color: #000000; ">&lt;&lt;</span>&nbsp;<span style="color: #000000; ">30</span><span style="color: #000000; ">;<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;n;<br /><br /></span><span style="color: #0000ff; ">struct</span><span style="color: #000000; ">&nbsp;Edge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;v,&nbsp;next,&nbsp;c,&nbsp;w;<br />}&nbsp;edge[maxm];<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;head[maxn],&nbsp;cnt;<br /><br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;add_edge(</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,&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;w,&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;c)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].w&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;w;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;u;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].w&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].c&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">-</span><span style="color: #000000; ">c;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[v];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;dis[maxn],&nbsp;pre[maxn];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;alpha[maxn];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;que[maxn],&nbsp;qhead,&nbsp;qrear;<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;spfa(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;s,&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;e)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<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;maxn;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(alpha,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(alpha));<br />&nbsp;&nbsp;&nbsp;&nbsp;dis[s]&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;que[qhead&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;qrear&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;alpha[s]&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">&nbsp;(qhead&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;qrear)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;que[qhead</span><span style="color: #000000; ">++</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qhead&nbsp;</span><span style="color: #000000; ">%=</span><span style="color: #000000; ">&nbsp;maxn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alpha[k]&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[k];&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; ">q;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[q].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(edge[q].w)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(dis[k]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;edge[q].c&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;dis[edge[q].v])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[edge[q].v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[k]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;edge[q].c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[edge[q].v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;q;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">alpha[edge[q].v])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alpha[edge[q].v]&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(edge[q].c&nbsp;</span><span style="color: #000000; ">&lt;</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qhead&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(qhead&nbsp;</span><span style="color: #000000; ">-</span>&nbsp;<span style="color: #000000; ">1</span>&nbsp;<span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;maxn)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;maxn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[qhead]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[q].v;<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[qrear</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[q].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qrear&nbsp;</span><span style="color: #000000; ">%=</span><span style="color: #000000; ">&nbsp;maxn;<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;}<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(dis[e]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;inf)&nbsp;</span><span style="color: #0000ff; ">return</span>&nbsp;<span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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;e;&nbsp;i&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;s;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[pre[i]&nbsp;</span><span style="color: #000000; ">^</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">].v)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;min(k,&nbsp;edge[pre[i]].w);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;k;<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;mcmf(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;s,&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;t)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">~</span><span style="color: #000000; ">(k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;spfa(s,&nbsp;t)))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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;t;&nbsp;i&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;s;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[pre[i]&nbsp;</span><span style="color: #000000; ">^</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">].v)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edge[pre[i]].w&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edge[pre[i]&nbsp;</span><span style="color: #000000; ">^</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">].w&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;dis[t]&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;ans;<br />}<br /><br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(head,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(head));<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;T;<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; ">,&nbsp;</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; ">&nbsp;(T</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<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;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;b,&nbsp;c;<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%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_edge(a&nbsp;</span><span style="color: #000000; ">+</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;b&nbsp;</span><span style="color: #000000; ">+</span>&nbsp;<span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span>&nbsp;<span style="color: #000000; ">401</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_edge(i,&nbsp;i&nbsp;</span><span style="color: #000000; ">+</span>&nbsp;<span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mcmf(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">402</span><span style="color: #000000; ">);<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; ">,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div></div></div></div><img src ="http://www.cppblog.com/lvlawliet/aggbug/158402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lvlawliet/" target="_blank">LLawliet</a> 2011-10-15 22:20 <a href="http://www.cppblog.com/lvlawliet/articles/158402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU2934：Gargoyle</title><link>http://www.cppblog.com/lvlawliet/articles/158395.html</link><dc:creator>LLawliet</dc:creator><author>LLawliet</author><pubDate>Sat, 15 Oct 2011 14:16:00 GMT</pubDate><guid>http://www.cppblog.com/lvlawliet/articles/158395.html</guid><wfw:comment>http://www.cppblog.com/lvlawliet/comments/158395.html</wfw:comment><comments>http://www.cppblog.com/lvlawliet/articles/158395.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lvlawliet/comments/commentRss/158395.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lvlawliet/services/trackbacks/158395.html</trackback:ping><description><![CDATA[<div><span class="Apple-style-span" style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><h1 style="color: #1a5cc8; text-align: center; ">Gargoyle</h1><font><strong><span style="font-family: Arial; font-size: 12px; font-weight: bold; color: green; ">Time Limit: 2000/1000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 32768/32768 K (Java/Others)<br />Total Submission(s): 139&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 22<br /></span></strong></font><br /><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Problem Description</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">Gargoyles can trace their history back many thousands of years to ancient Egypt, Greece, and Rome. Terra cotta waterspouts were formed in the shapes of animals such as lions and birds to serve the physical function of running the<br />rainwater away from the walls and foundations of buildings, and the spiritual function of protecting from evil forces.<br />Have you ever dreamed of creating your own castle with a lot of beautiful gargoyles on the walls? To your knowledge,<br />the speed of water coming out of each gargoyle should be identical, so an elaborately designed water system is required.<br />The water system consists of a huge reservoir and several interconnecting water pipes. Pipes cannot save water, so the total incoming and outgoing speed of water should be equal at each connection.<br />All the water from gargoyles flows into the reservoir, which is located at the bottom of the castle. Some pipes are connecting the reservoir, but water can only go from the reservoir to pipes, but never from pipes back to the reservoir. A micro-processor is installed inside each pipe, so the speed of water could easily be controlled. However, the microprocessors consume electricity. The exact cost in each pipe is proportional to the speed of water. If the cost constant in the i-th pipe is ci, the electricity cost in that pipe is civi, where vi is the speed of water in that pipe. Write a program to find the optimal configuration of the water system (i.e. the water speed in each pipe) of your dream castle, so that the total cost is minimized. It is always possible to build a water system.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Input</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">The input consists of several test cases. The first line of each case contains three integers n, m and k (1 &#8804; n &#8804; 25, 1 &#8804; m &#8804; 50, 1 &#8804; k &#8804; 1000), the number of gargoyles, the number of pipe connections and the number of pipes. The following k lines each contains five integers a, b, l, u, c (0 &#8804; a, b &#8804; n + m, 0 &#8804; l &#8804; u &#8804; 100, 1 &#8804; c &#8804; 100), describing each pipe. a and b<br />are the incoming and outgoing vertex number (reservoir is 0, gargoyles are numbered 1 to n, pipe connections are numbered n + 1 to n + m), lower-bound and upper-bound of water speed, and the cost constant. No pipe connects two identical vertices. For every pipe, the incoming vertex will never be a gargoyle, and the outgoing vertex will never be the reservoir. For every pair of vertices, there could be at most one pipe connecting them (if a pipe is going from a to b, no pipes can go from a to b, or from b to a). The last test case is followed by a single zero, which should not be processed.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Output</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">For each test case, print the case number and minimal cost to two decimal places.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Sample Input</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; "><div style="font-family: 'Courier New', Courier, monospace; ">3 1 4
0 4 8 15 5
4 1 2 5 2
4 2 1 6 1
4 3 3 7 2
0</div></pre></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Sample Output</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; "><div style="font-family: 'Courier New', Courier, monospace; ">Case 1: 60.00</div></pre></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Source</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; "><a href="http://acm.hdu.edu.cn/search.php?field=problem&amp;key=2006%20Asia%20Regional%20Xi-An&amp;source=1&amp;searchmode=source" style="color: #1a5cc8; text-decoration: none; ">2006 Asia Regional Xi-An</a></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Recommend</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">lcy</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><div><br /><br /><br /><br />06年亚洲区域赛西安赛区的一道网络流，相当犀利......我WA很久很久才勉强过了.......<br /><br /><div><div>一．总体分析</div><div>本题给出了一个网络流的模型。以积水池为源点，每个连接点和喷水口为结点，另外建立一个超级汇，每个喷水口向超级汇连一条边。题目就是求一个有上下界的最小费用流，其中到汇点的每一条边的流量必须相等(*)。</div><div>很多文献对有上下界的费用流进行了讨论，本文不再赘述。本文主要讨论解决如何解决(*)的要求。<br /><br /><div><div>二．判断可行流</div><div>我们不妨设所有连接到汇点的边的流量均为F，我们要做的第一步就是：判断是否存在这样一组可行流使得F = F0成立。</div><div>我们不妨给每一条连接到汇点的边建立上下界[0，F0]。我们给出以下引理：<br /><div><div>引理一：存在满足使得F0的可行流，当且仅当该网络的最大流为F0N。</div><div>引理二：若最大流小于F0N，则不存在F &gt;= F0的可行流；</div><div>引理三：若不存在可行流，则不存在F &lt;= F0的可行流；</div></div><br /><div><div>由引理二、三可知：</div><div>引理四：</div><div>存在可行流的F的定义域为一段连续的区间[low, top]。</div><div>根据引理二、三和四，我们不难使用二分法找出这一段F的可行区间[low, top]。</div></div><br /><div><div>三．找出最小费用流</div><div>记cost(F)表示在F成立的最小费用。我们猜测，cost(F)与F成正比！</div><div>感觉上，F越大，流量越大，那么每条边上消耗的费用也就越大，所以猜想应该成立。可惜的是，按照该想法提交是无法通过测试数据的。因为：<br /><img src="http://www.cppblog.com/images/cppblog_com/lvlawliet/g1.jpg" width="805" height="431" alt="" /><br /><div><div>大家不免疑问，单调函数不也是凸的么？</div><div>注意到有上下界的最小费用由两部分构成：附加网络的最小费用及残余网络的最小费用。注意到前者是关于F不增的后者是关于F不减的，如果前者的递减速度大于后者的递增速度，那么cost(F)将成为下凸函数。</div></div><br /><div>四．算法流程<br /><img src="http://www.cppblog.com/images/cppblog_com/lvlawliet/g2.jpg" width="800" height="296" alt="" /><br /><div>由于最小费用流的时间复杂度不好分析，本文直接认为是O(kN2)，其中k表示增广次数，算法总的时间复杂度为O(kN2logC)。</div></div></div></div></div></div></div></div></div></span></div><img src ="http://www.cppblog.com/lvlawliet/aggbug/158395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lvlawliet/" target="_blank">LLawliet</a> 2011-10-15 22:16 <a href="http://www.cppblog.com/lvlawliet/articles/158395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1149:PIGS</title><link>http://www.cppblog.com/lvlawliet/articles/158386.html</link><dc:creator>LLawliet</dc:creator><author>LLawliet</author><pubDate>Sat, 15 Oct 2011 14:12:00 GMT</pubDate><guid>http://www.cppblog.com/lvlawliet/articles/158386.html</guid><wfw:comment>http://www.cppblog.com/lvlawliet/comments/158386.html</wfw:comment><comments>http://www.cppblog.com/lvlawliet/articles/158386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lvlawliet/comments/commentRss/158386.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lvlawliet/services/trackbacks/158386.html</trackback:ping><description><![CDATA[<div><div><div><div><span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><table border="0" width="100%" background="http://poj.org/images/table_back.jpg"><tbody><tr><td><div class="ptt" lang="en-US" style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">PIGS</div><div class="plm" style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 12pt; "><table align="center"><tbody><tr><td><strong>Time Limit:</strong>&nbsp;1000MS</td><td width="10px"></td><td><strong>Memory Limit:</strong>&nbsp;10000K</td></tr><tr><td><strong>Total Submissions:</strong>&nbsp;10566</td><td width="10px"></td><td><strong>Accepted:</strong>&nbsp;4622</td></tr></tbody></table></div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Description</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the farm one after another. Each of them has keys to some pig-houses and wants to buy a certain number of pigs.&nbsp;<br />All data concerning customers planning to visit the farm on that particular day are available to Mirko early in the morning so that he can make a sales-plan in order to maximize the number of pigs sold.&nbsp;<br />More precisely, the procedure is as following: the customer arives, opens all pig-houses to which he has the key, Mirko sells a certain number of pigs from all the unlocked pig-houses to him, and, if Mirko wants, he can redistribute the remaining pigs across the unlocked pig-houses.&nbsp;<br />An unlimited number of pigs can be placed in every pig-house.&nbsp;<br />Write a program that will find the maximum number of pigs that he can sell on that day.</div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Input</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">The first line of input contains two integers M and N, 1 &lt;= M &lt;= 1000, 1 &lt;= N &lt;= 100, number of pighouses and number of customers. Pig houses are numbered from 1 to M and customers are numbered from 1 to N.&nbsp;<br />The next line contains M integeres, for each pig-house initial number of pigs. The number of pigs in each pig-house is greater or equal to 0 and less or equal to 1000.&nbsp;<br />The next N lines contains records about the customers in the following form ( record about the i-th customer is written in the (i+2)-th line):&nbsp;<br />A K1 K2 ... KA B It means that this customer has key to the pig-houses marked with the numbers K1, K2, ..., KA (sorted nondecreasingly ) and that he wants to buy B pigs. Numbers A and B can be equal to 0.</div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Output</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">The first and only line of the output should contain the number of sold pigs.</div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Sample Input</p><pre class="sio" style="font-family: 'Courier New', Courier, monospace; font-size: 12pt; ">3 3
3 1 10
2 1 2 2
2 1 3 3
1 2 6</pre><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Sample Output</p><pre class="sio" style="font-family: 'Courier New', Courier, monospace; font-size: 12pt; ">7<br /><br /><br /></pre><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">最大流，构图思想：用人当点，因为每个人是按顺序的，所以第i个人第一次打开第k个猪圈，第j个人第二次打开第k个猪圈时，相当于第i个人向第j个人增流。<br />所以，如果第i个人持有第k个猪圈的钥匙，如果是第一次打开，就从源点引边向该点，边权累加猪圈的值（一个人可能持有多个钥匙，所以要累加），如果不是第一次，那么从上一次那个人引出一条无限大的边到i点作为增流。每个点到汇点的权值是该人需要的个数，最大流一次就行了。<br />SAP，时间很好看。<br />代码：</div></td></tr></tbody></table></span><span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; font-size: 13px; line-height: normal; background-color: #eeeeee; "><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;<br /></span></span><span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><table border="0" width="100%" background="http://poj.org/images/table_back.jpg"><tbody><tr><td><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 1076px; word-break: break-all; "><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000ff; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">queue</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;N&nbsp;1010</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; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;maxnode</span><span style="color: #000000; ">=</span><span style="color: #000000; ">60000</span><span style="color: #000000; ">;<br /></span><span style="color: #0000ff; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;maxedge</span><span style="color: #000000; ">=</span><span style="color: #000000; ">320000</span><span style="color: #000000; ">;<br /></span><span style="color: #0000ff; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;&nbsp;inf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">30</span><span style="color: #000000; ">;<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;S,T,cnt,n,m;<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;head[maxnode],gap[maxnode],pre[maxnode],cur[maxnode],dis[maxnode];<br /></span><span style="color: #0000ff; ">struct</span><span style="color: #000000; ">&nbsp;Edge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;S,t;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;next;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;w;<br />}st[maxedge];<br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(head,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(head));<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></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;S,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;t,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;w)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].S</span><span style="color: #000000; ">=</span><span style="color: #000000; ">S;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">t;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].w</span><span style="color: #000000; ">=</span><span style="color: #000000; ">w;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].next</span><span style="color: #000000; ">=</span><span style="color: #000000; ">head[S];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[S]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].S</span><span style="color: #000000; ">=</span><span style="color: #000000; ">t;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">S;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].w</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].next</span><span style="color: #000000; ">=</span><span style="color: #000000; ">head[t];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[t]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;bfs()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(gap,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(gap));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(dis,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(dis));<br />&nbsp;&nbsp;&nbsp;&nbsp;queue</span><span style="color: #000000; ">&lt;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">Q;<br />&nbsp;&nbsp;&nbsp;&nbsp;Q.push(T);<br />&nbsp;&nbsp;&nbsp;&nbsp;dis[T]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;gap[</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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;k,t;<br />&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; ">Q.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Q.front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.pop();<br />&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</span><span style="color: #000000; ">=</span><span style="color: #000000; ">head[k];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; ">st[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st[i].t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(dis[t]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">st[i</span><span style="color: #000000; ">^</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].w</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[t]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">dis[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;gap[dis[t]]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.push(t);<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;}<br />}<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;sap()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">S;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">T;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)cur[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">head[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;pre[S]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">S;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;u</span><span style="color: #000000; ">=</span><span style="color: #000000; ">S,v;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;&nbsp;flow</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;aug</span><span style="color: #000000; ">=</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">bool</span><span style="color: #000000; ">&nbsp;flag;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(dis[S]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">T)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">false</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">cur[u];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; ">st[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st[i].t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(st[i].w</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">dis[u]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">dis[v]</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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[v]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">u;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aug</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(aug</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">st[i].w)</span><span style="color: #000000; ">?</span><span style="color: #000000; ">st[i].w:aug;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u</span><span style="color: #000000; ">=</span><span style="color: #000000; ">v;<br />&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; ">(v</span><span style="color: #000000; ">==</span><span style="color: #000000; ">T)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">aug;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(u</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pre[u];v</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">S;u</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pre[u])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v</span><span style="color: #000000; ">=</span><span style="color: #000000; ">u;<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;st[cur[u]].w</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">aug;<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;st[cur[u]</span><span style="color: #000000; ">^</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].w</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">aug;<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;aug</span><span style="color: #000000; ">=</span><span style="color: #000000; ">inf;<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;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(flag</span><span style="color: #000000; ">==</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;mint</span><span style="color: #000000; ">=</span><span style="color: #000000; ">T;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">head[u];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; ">st[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st[i].t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(st[i].w</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">mint</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">dis[v])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mint</span><span style="color: #000000; ">=</span><span style="color: #000000; ">dis[v];<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;gap[dis[u]]</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(gap[dis[u]]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap[dis[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">mint</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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pre[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(u</span><span style="color: #000000; ">==</span><span style="color: #000000; ">S)aug</span><span style="color: #000000; ">=</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;flow;<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;map[N][N];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;num[N];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;f[N];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">&nbsp;(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n)&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(map,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(map));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(f,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">num[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;b;<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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;a;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(f[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 />&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;map[S][i]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;num[x];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[x]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<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;</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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[f[x]][i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[x]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][T]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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;S;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;T;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;S;&nbsp;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;T;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(map[i][j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">printf("%d&nbsp;%d&nbsp;%d\n",&nbsp;i,&nbsp;j,&nbsp;map[i][j]);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddEdge(i,&nbsp;j,&nbsp;map[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bfs();<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; ">,&nbsp;sap());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />4&nbsp;2<br />1&nbsp;2&nbsp;3&nbsp;5<br />3&nbsp;1&nbsp;2&nbsp;3&nbsp;10<br />1&nbsp;4&nbsp;5<br /><br /></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span></div></td></tr></tbody></table></span></div></div></div></div><img src ="http://www.cppblog.com/lvlawliet/aggbug/158386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lvlawliet/" target="_blank">LLawliet</a> 2011-10-15 22:12 <a href="http://www.cppblog.com/lvlawliet/articles/158386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU3879:Base Station</title><link>http://www.cppblog.com/lvlawliet/articles/158384.html</link><dc:creator>LLawliet</dc:creator><author>LLawliet</author><pubDate>Sat, 15 Oct 2011 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/lvlawliet/articles/158384.html</guid><wfw:comment>http://www.cppblog.com/lvlawliet/comments/158384.html</wfw:comment><comments>http://www.cppblog.com/lvlawliet/articles/158384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lvlawliet/comments/commentRss/158384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lvlawliet/services/trackbacks/158384.html</trackback:ping><description><![CDATA[<div><span class="Apple-style-span" style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><h1 style="color: #1a5cc8; text-align: center; ">Base Station</h1><font><strong><span style="font-family: Arial; font-size: 12px; font-weight: bold; color: green; ">Time Limit: 5000/2000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 65768/32768 K (Java/Others)<br />Total Submission(s): 844&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 353<br /></span></strong></font><br /><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Problem Description</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">A famous mobile communication company is planning to build a new set of base stations. According to the previous investigation, n places are chosen as the possible new locations to build those new stations. However, the condition of each position varies much, so the costs to built a station at different places are different. The cost to build a new station at the ith place is P<sub>i</sub>&nbsp;(1&lt;=i&lt;=n).<br /><br />When complete building, two places which both have stations can communicate with each other.<br /><br />Besides, according to the marketing department, the company has received m requirements. The ith requirement is represented by three integers A<sub>i</sub>, B<sub>i</sub>&nbsp;and C<sub>i</sub>, which means if place A<sub>i&nbsp;</sub>and B<sub>i</sub>&nbsp;can communicate with each other, the company will get C<sub>i</sub>&nbsp;profit.<br /><br />Now, the company wants to maximize the profits, so maybe just part of the possible locations will be chosen to build new stations. The boss wants to know the maximum profits.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Input</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">Multiple test cases (no more than 20), for each test case:<br />The first line has two integers n (0&lt;n&lt;=5000) and m (0&lt;m&lt;=50000).<br />The second line has n integers, P1 through Pn, describes the cost of each location.<br />Next m line, each line contains three integers, A<sub>i</sub>, B<sub>i</sub>&nbsp;and C<sub>i</sub>, describes the ith requirement.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Output</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">One integer each case, the maximum profit of the company.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Sample Input</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; "><div style="font-family: 'Courier New', Courier, monospace; ">5 5
1 2 3 4 5
1 2 3
2 3 4
1 3 3
1 4 2
4 5 3</div></pre></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Sample Output</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; "><div style="font-family: 'Courier New', Courier, monospace; ">4</div></pre></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Author</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">liulibo</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Source</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; "><a href="http://acm.hdu.edu.cn/search.php?field=problem&amp;key=2011%20Multi-University%20Training%20Contest%205%20-%20Host%20by%20BNU&amp;source=1&amp;searchmode=source" style="color: #1a5cc8; text-decoration: none; ">2011 Multi-University Training Contest 5 - Host by BNU</a></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="padding-right: 14px; padding-left: 14px; height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Recommend</div><div class="panel_content" style="padding-right: 20px; padding-left: 20px; height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-repeat: no-repeat repeat; ">lcy</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><div></div></span>论文题，Amber最小割模型里面的，最大权闭合图，因为数组开的太大了，吃了一次RE......<br />最大权闭合图不用说了，边看成收益点，连向S，流量是点权，站点看成花费点，连向T，流量也是点权，其他按照原图连边，流量是无限大，之后做一次最小割，割值就是你未选的收益点+选定花费点（因为是闭合图，所以割肯定是简单割，想一下割的定义，就明白割值的含义了），用你总收益-割值，就是答案。<br />用SAP求的最小割，渐渐爱上SAP了，Dinic不用了.....<br />代码：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><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 />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">queue</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 /><br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;maxnode&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">60000</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;maxedge&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">320000</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&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;inf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(1LL&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">35</span><span style="color: #000000; ">);<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;S,&nbsp;T,&nbsp;cnt;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;head[maxnode],&nbsp;gap[maxnode],&nbsp;pre[maxnode],&nbsp;cur[maxnode],&nbsp;dis[maxnode];<br /><br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;Edge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;s,&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;next;<br />&nbsp;&nbsp;&nbsp;&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;w;<br />}&nbsp;st[maxedge];<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(head,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(head));<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br /></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;s,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;t,&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;w)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].w&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;w;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[s];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[s]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].w&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[t];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[t]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;bfs()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(gap,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(gap));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(dis,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(dis));<br />&nbsp;&nbsp;&nbsp;&nbsp;queue&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;Q;<br />&nbsp;&nbsp;&nbsp;&nbsp;Q.push(T);<br />&nbsp;&nbsp;&nbsp;&nbsp;dis[T]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;gap[</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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;k,&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">Q.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Q.front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</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;head[k];&nbsp;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; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;st[i].t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dis[t]&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; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;st[i&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].w&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[t]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[k]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</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;gap[dis[t]]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.push(t);<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;}<br />}<br /><br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;sap()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;S;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;T;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;pre[S]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;S;<br />&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;S,&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&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;flow&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;flag;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(dis[S]&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;T)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cur[u];&nbsp;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; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;st[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;st[i].t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(st[i].w&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;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;dis[u]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;dis[v]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;u;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(aug&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;st[i].w)&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;st[i].w&nbsp;:&nbsp;aug;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(v&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;T)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;aug;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pre[u];&nbsp;v&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;S;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pre[u])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;u;<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;st[cur[u]].w&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;aug;<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;st[cur[u]&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].w&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;aug;<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;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(flag&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mint&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;T;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[u];&nbsp;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; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;st[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;st[i].t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(st[i].w&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;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;mint&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;dis[v])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mint&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[v];<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;gap[dis[u]]</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(gap[dis[u]]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap[dis[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mint&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pre[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(u&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;S)&nbsp;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;flow;<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,&nbsp;m;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%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; ">!=</span><span style="color: #000000; ">&nbsp;EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;x;<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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddEdge(m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;i,&nbsp;T,&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;b,&nbsp;c;<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%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddEdge(S,&nbsp;i,&nbsp;c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddEdge(i,&nbsp;m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;a,&nbsp;inf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddEdge(i,&nbsp;m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;b,&nbsp;inf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bfs();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;sap();<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; ">,&nbsp;sum);<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></div><img src ="http://www.cppblog.com/lvlawliet/aggbug/158384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lvlawliet/" target="_blank">LLawliet</a> 2011-10-15 22:10 <a href="http://www.cppblog.com/lvlawliet/articles/158384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2914:Minimum Cut</title><link>http://www.cppblog.com/lvlawliet/articles/158385.html</link><dc:creator>LLawliet</dc:creator><author>LLawliet</author><pubDate>Sat, 15 Oct 2011 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/lvlawliet/articles/158385.html</guid><wfw:comment>http://www.cppblog.com/lvlawliet/comments/158385.html</wfw:comment><comments>http://www.cppblog.com/lvlawliet/articles/158385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lvlawliet/comments/commentRss/158385.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lvlawliet/services/trackbacks/158385.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><table border="0" width="100%" background="http://poj.org/images/table_back.jpg"><tbody><tr><td><div class="ptt" lang="en-US" style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Minimum Cut</div><div class="plm" style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 12pt; "><table align="center"><tbody><tr><td><strong>Time Limit:</strong>&nbsp;10000MS</td><td width="10px"></td><td><strong>Memory Limit:</strong>&nbsp;65536K</td></tr><tr><td><strong>Total Submissions:</strong>&nbsp;5403</td><td width="10px"></td><td><strong>Accepted:</strong>&nbsp;2113</td></tr><tr><td colspan="3" align="center" style="color: #0ead00; "><strong>Case Time Limit:</strong>&nbsp;5000MS</td></tr></tbody></table></div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Description</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; "><p>Given an undirected graph, in which two vertices can be connected by multiple edges, what is the size of the minimum cut of the graph? i.e. how many edges must be removed at least to disconnect the graph into two subgraphs?</p></div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Input</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; "><span lang="en-us"><p>Input contains multiple test cases. Each test case starts with two integers&nbsp;<em>N</em>&nbsp;and&nbsp;<em>M</em>&nbsp;(2 &#8804;&nbsp;<em>N</em>&nbsp;&#8804; 500, 0 &#8804;&nbsp;<em>M</em>&nbsp;&#8804;&nbsp;<em>N</em>&nbsp;&#215; (<em>N</em>&nbsp;&#8722; 1) &#8260; 2) in one line, where&nbsp;<em>N</em>&nbsp;is the number of vertices. Following are&nbsp;<em>M</em>&nbsp;lines, each line contains&nbsp;<em>M</em>&nbsp;integers&nbsp;<em>A</em>,&nbsp;<em>B</em>&nbsp;and&nbsp;<em>C</em>&nbsp;(0 &#8804;&nbsp;<em>A</em>,&nbsp;<em>B</em>&nbsp;&lt;&nbsp;<em>N</em>,&nbsp;<em>A</em>&nbsp;&#8800;&nbsp;<em>B</em>,&nbsp;<em>C</em>&nbsp;&gt; 0), meaning that there&nbsp;<em>C</em>&nbsp;edges connecting vertices&nbsp;<em>A</em>&nbsp;and&nbsp;<em>B</em>.</p></span></div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Output</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; "><p>There is only one line for each test case, which contains the size of the minimum cut of the graph. If the graph is disconnected, print 0.</p></div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Sample Input</p><pre class="sio" style="font-family: 'Courier New', Courier, monospace; font-size: 12pt; ">3 3
0 1 1
1 2 1
2 0 1
4 3
0 1 1
1 2 1
2 3 1
8 14
0 1 1
0 2 1
0 3 1
1 2 1
1 3 1
2 3 1
4 5 1
4 6 1
4 7 1
5 6 1
5 7 1
6 7 1
4 0 1
7 3 1</pre><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Sample Output</p><pre class="sio" style="font-family: 'Courier New', Courier, monospace; font-size: 12pt; ">2
1
2</pre><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Source</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; "><a href="http://poj.org/searchproblem?field=source&amp;key=Baidu+Star+2006+Semifinal" style="text-transform: none; text-decoration: none; ">Baidu Star 2006 Semifinal</a>&nbsp;<br />Wang, Ying (Originator)&nbsp;<br />Chen, Shixi (Test cases)<br /><br />全局最小割，模板题，Stor-Wagner算法，大概就是prime的最大生成树，具体的网上有很多，可以google到的，不多说了。<br />代码：</div></td></tr></tbody></table></span><span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; font-size: 13px; line-height: normal; background-color: #eeeeee; "><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span></span><span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><table border="0" width="100%" background="http://poj.org/images/table_back.jpg"><tbody><tr><td><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 1076px; word-break: break-all; "><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000ff; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;NN&nbsp;504</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;INF&nbsp;1&nbsp;&lt;&lt;&nbsp;30</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;vis[NN];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;wet[NN];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;combine[NN];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;map[NN][NN];<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;S,&nbsp;T,&nbsp;minCut,&nbsp;N;<br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;Search()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i,&nbsp;j,&nbsp;Max,&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(vis));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(wet,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(wet));<br />&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;T&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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</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 />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;N;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">combine[j]&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">vis[j]&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;wet[j]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;Max)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;wet[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(T&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;tmp)&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;T;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minCut&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Max;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[tmp]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;N;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">combine[j]&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">vis[j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wet[j]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;map[tmp][j];<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;}<br />}<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;Stoer_Wagner()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(combine,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(combine));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</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;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Search();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(minCut&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;ans)&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;minCut;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&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; ">)&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combine[T]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;N;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">combine[j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[S][j]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;map[T][j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[j][S]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;map[j][T];<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;ans;<br />}<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;M;<br />&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; ">,&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; ">!=</span><span style="color: #000000; ">&nbsp;EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(map,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(map));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(M</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[a][b]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[b][a]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;c;<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; ">,&nbsp;Stoer_Wagner());<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></td></tr></tbody></table></span><img src ="http://www.cppblog.com/lvlawliet/aggbug/158385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lvlawliet/" target="_blank">LLawliet</a> 2011-10-15 22:10 <a href="http://www.cppblog.com/lvlawliet/articles/158385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2125:Destroying The Graph</title><link>http://www.cppblog.com/lvlawliet/articles/158383.html</link><dc:creator>LLawliet</dc:creator><author>LLawliet</author><pubDate>Sat, 15 Oct 2011 14:09:00 GMT</pubDate><guid>http://www.cppblog.com/lvlawliet/articles/158383.html</guid><wfw:comment>http://www.cppblog.com/lvlawliet/comments/158383.html</wfw:comment><comments>http://www.cppblog.com/lvlawliet/articles/158383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lvlawliet/comments/commentRss/158383.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lvlawliet/services/trackbacks/158383.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><table border="0" width="100%" background="http://poj.org/images/table_back.jpg"><tbody><tr><td><div class="ptt" lang="en-US" style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Destroying The Graph</div><div class="plm" style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 12pt; "><table align="center"><tbody><tr><td><strong>Time Limit:</strong>&nbsp;2000MS</td><td width="10px"></td><td colspan="3"><strong>Memory Limit:</strong>&nbsp;65536K</td></tr><tr><td><strong>Total Submissions:</strong>&nbsp;4718</td><td width="10px"></td><td><strong>Accepted:</strong>&nbsp;1436</td><td width="10px"></td><td style="font-weight: bold; color: red; ">Special Judge</td></tr></tbody></table></div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Description</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that Bob tries to destroy it. In a move he may take any vertex of the graph and remove either all arcs incoming into this vertex, or all arcs outgoing from this vertex.&nbsp;<br />Alice assigns two costs to each vertex: Wi<sup>+</sup>&nbsp;and Wi<sup>-</sup>. If Bob removes all arcs incoming into the i-th vertex he pays Wi<sup>+</sup>&nbsp;dollars to Alice, and if he removes outgoing arcs he pays Wi<sup>-</sup>&nbsp;dollars.&nbsp;<br />Find out what minimal sum Bob needs to remove all arcs from the graph.</div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Input</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">Input file describes the graph Alice has drawn. The first line of the input file contains N and M (1 &lt;= N &lt;= 100, 1 &lt;= M &lt;= 5000). The second line contains N integer numbers specifying Wi<sup>+</sup>. The third line defines Wi<sup>-</sup>&nbsp;in a similar way. All costs are positive and do not exceed 10<sup>6</sup>&nbsp;. Each of the following M lines contains two integers describing the corresponding arc of the graph. Graph may contain loops and parallel arcs.</div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Output</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; ">On the first line of the output file print W --- the minimal sum Bob must have to remove all arcs from the graph. On the second line print K --- the number of moves Bob needs to do it. After that print K lines that describe Bob's moves. Each line must first contain the number of the vertex and then '+' or '-' character, separated by one space. Character '+' means that Bob removes all arcs incoming into the specified vertex and '-' that Bob removes all arcs outgoing from the specified vertex.</div><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Sample Input</p><pre class="sio" style="font-family: 'Courier New', Courier, monospace; font-size: 12pt; ">3 6
1 2 3
4 2 1
1 2
1 1
3 2
1 2
3 1
2 3
</pre><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Sample Output</p><pre class="sio" style="font-family: 'Courier New', Courier, monospace; font-size: 12pt; ">5
3
1 +
2 -
2 +</pre><p class="pst" style="text-align: left; font-family: Arial, Helvetica, sans-serif; font-size: 18pt; font-weight: bold; color: blue; ">Source</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif; font-size: 12pt; "><a href="http://poj.org/searchproblem?field=source&amp;key=Northeastern+Europe+2003" style="text-transform: none; text-decoration: none; ">Northeastern Europe 2003</a>, Northern Subregion<br /><br /><br /><br />一道典型的最小点权覆盖问题，SAP速度很好看，之后需要搜索一下用过的点，输出即可。<br />代码：<br /><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 1076px; word-break: break-all; "><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 />#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 />#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 />#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: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;N&nbsp;10010</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;M&nbsp;20010</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;inf&nbsp;1&nbsp;&lt;&lt;&nbsp;30</span><span style="color: #000000; "><br /></span><span style="color: #0000ff; ">#define</span><span style="color: #000000; ">&nbsp;eps&nbsp;1&nbsp;&lt;&lt;&nbsp;29</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 /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;mark[N];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;cnt,&nbsp;n,&nbsp;m,&nbsp;s,&nbsp;t;<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;head[N];<br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;NN;<br /><br /></span><span style="color: #0000ff; ">struct</span><span style="color: #000000; ">&nbsp;edge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;v,&nbsp;next,&nbsp;w;<br />}&nbsp;edge[M];<br /><br /></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,&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;w)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].w&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;w;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;u;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].w&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge[cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[v];<br />&nbsp;&nbsp;&nbsp;&nbsp;head[v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;sap()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;pre[N],&nbsp;cur[N],&nbsp;dis[N],&nbsp;gap[N];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;flow&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf,&nbsp;u;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">bool</span><span style="color: #000000; ">&nbsp;flag;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;NN;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;gap[s]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NN;<br />&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pre[s]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">&nbsp;(dis[s]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;NN)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cur[u];&nbsp;j&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; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[j].next)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[j].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(edge[j].w&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;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;dis[u]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;dis[v]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</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; ">if</span><span style="color: #000000; ">&nbsp;(edge[j].w&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;aug)&nbsp;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[j].w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;u;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(u&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;t)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;aug;<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; ">while</span><span style="color: #000000; ">&nbsp;(u&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pre[u];<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;edge[cur[u]].w&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;aug;<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;edge[cur[u]&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].w&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;aug;<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;aug&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(flag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;mindis&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NN;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;head[u];&nbsp;j&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; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[j].next)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[j].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(edge[j].w&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;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;dis[v]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;mindis)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mindis&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[v];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;((</span><span style="color: #000000; ">--</span><span style="color: #000000; ">gap[dis[u]])&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap[dis[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mindis&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pre[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;flow;<br />}<br /><br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(head,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(head));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(mark,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000ff; ">sizeof</span><span style="color: #000000; ">(mark));<br />}<br /><br /></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;x) &nbsp; &nbsp; &nbsp;//不同于单纯的SAP，加入了一个搜素点集元素的函数，通过head数组的记录信息搜索。<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;mark[x]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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;head[x];&nbsp;i;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge[i].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(edge[i].w&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;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">mark[edge[i].v])&nbsp;dfs(edge[i].v);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">&nbsp;(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; ">!=</span><span style="color: #000000; ">&nbsp;EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;wp[</span><span style="color: #000000; ">101</span><span style="color: #000000; ">],&nbsp;wm[</span><span style="color: #000000; ">101</span><span style="color: #000000; ">],&nbsp;w,&nbsp;len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;ans[</span><span style="color: #000000; ">105</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NN&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">wp[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n,&nbsp;t,&nbsp;wp[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">wm[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(s,&nbsp;i,&nbsp;wm[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;y;<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%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(x,&nbsp;y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n,&nbsp;inf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sap();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">mark[i])&nbsp;ans[len</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">&nbsp;(mark[i&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n])&nbsp;ans[len</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;w,&nbsp;len);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</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; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;len;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&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; ">if</span><span style="color: #000000; ">&nbsp;(ans[i]&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n)&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;-\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;ans[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&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&nbsp;+\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;ans[i]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div></div></td></tr></tbody></table></span><font class="Apple-style-span" face="georgia, verdana, Arial, helvetica, sans-seriff"><span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"><strong><br /></strong></span></font><img src ="http://www.cppblog.com/lvlawliet/aggbug/158383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lvlawliet/" target="_blank">LLawliet</a> 2011-10-15 22:09 <a href="http://www.cppblog.com/lvlawliet/articles/158383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>