<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beyond the Void &#187; 网络流</title>
	<atom:link href="http://www.byvoid.com/blog/tag/%e7%bd%91%e7%bb%9c%e6%b5%81/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.byvoid.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 29 Jun 2010 08:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>NOI 2009 植物大战僵尸</title>
		<link>http://www.byvoid.com/blog/noi-2009-pvz/</link>
		<comments>http://www.byvoid.com/blog/noi-2009-pvz/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 12:47:15 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[NOI2009]]></category>
		<category><![CDATA[最大封闭子图]]></category>
		<category><![CDATA[最小割]]></category>
		<category><![CDATA[网络流]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1770</guid>
		<description><![CDATA[问题简述 有一些植物，每个植物携带有一定的资源（可正可负），且有一个攻击范围，可以保护攻击位置上的另一个植物。有一群僵尸从右向左进攻植物，僵尸不能走到植物的攻击范围内。任... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc241653477">问题简述</a></h3>
<p>有一些植物，每个植物携带有一定的资源（可正可负），且有一个攻击范围，可以保护攻击位置上的另一个植物。有一群僵尸从右向左进攻植物，僵尸不能走到植物的攻击范围内。任务是求一个进攻方案，使得僵尸获得的资源尽可能多。<span id="more-1770"></span></p>
<h3><a name="_Toc241653478"></a><a name="_Toc241035976">问题建模</a><a name="_Toc241035977"></a></h3>
<p>首先我们我建立图论模型，把每个植物当做一个顶点，植物携带的资源数目为顶点的权值。如果一个植物b在另一个植物a的攻击范围内，连接一条有向边&lt;a,b&gt;，表示a可以保护b。由于僵尸从右向左进攻，可以认为每个植物都被它右边相邻的植物保护，对于每个植物a（除最左边一列），向其左边的相邻植物b，连接一条有向边&lt;a,b&gt;。</p>
<p>题目中给出的样例建图后如下所示</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image5.png" border="0" alt="image" width="175" height="250" /></p>
<p>观察上图发现，{5,6}互相依赖，不可能被攻击到。我们可以用拓扑排序去除图中的环依赖结构，以简化图。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image6.png" border="0" alt="image" width="179" height="240" /></p>
<h4><a name="_Toc241653479">解法</a>1 搜索</h4>
<h5><a name="_Toc241653480"></a><a name="_Toc241035978">算法描述</a></h5>
<p>建模后，直接观察发现可以搜索。每次寻找一个入度为0的顶点，尝试攻击它，更新它指向的点的入度继续搜索。搜索中记录选取的顶点的权值之和，保留最大值。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image7.png" border="0" alt="image" width="175" height="166" /></p>
<h5><a name="_Toc241653481"></a><a name="_Toc241035980">复杂度分析</a></h5>
<p>搜索的时间复杂度为O(M<sup>N</sup>)。在实际测试中得到40分。</p>
<h5><a name="_Toc241653482"></a><a name="_Toc241035981">参考程序</a></h5>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1770code3'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17703"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
</pre></td><td class="code" id="p1770code3"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
* Problem: NOI2009 pvz
* Author: Guo Jiabao
* Time: 2009.7.29 12:01
* State: Solved
* Memo: 暴力搜索
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">603</span>,MAXM<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">4</span>,INF<span style="color: #000080;">=</span>~0U<span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> edge
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> t<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #000040;">*</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ES<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fi,<span style="color: #000040;">*</span>fo<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> R,C,EC,Ans,Maxflow,Stop,S,T,N<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> score<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ind<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> vis<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #000080;">=</span> b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> point2id<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> x <span style="color: #000040;">*</span> C <span style="color: #000040;">+</span> y <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,k,l,q,x,y,s,c<span style="color: #008080;">;</span>
	fi <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pvz.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pvz.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>R,<span style="color: #000040;">&amp;</span>C<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>R<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>C<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			k <span style="color: #000080;">=</span> point2id<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;</span>C<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				q <span style="color: #000080;">=</span> point2id<span style="color: #008000;">&#40;</span>i,j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>q,k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				ind<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>s,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			score<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> s<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>l<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>l<span style="color: #000080;">&lt;=</span>c<span style="color: #008080;">;</span>l<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>x,<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				q <span style="color: #000080;">=</span> point2id<span style="color: #008000;">&#40;</span>x,y<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>k,q<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				ind<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	N<span style="color: #000080;">=</span>R<span style="color: #000040;">*</span>C<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> s<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
		Ans <span style="color: #000080;">=</span> s<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	edge <span style="color: #000040;">*</span>e<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ind<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>vis<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			vis<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
				ind<span style="color: #008000;">&#91;</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #008000;">&#93;</span><span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			dfs<span style="color: #008000;">&#40;</span>s<span style="color: #000040;">+</span>score<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			vis<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
				ind<span style="color: #008000;">&#91;</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	Ans <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	dfs<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fo,<span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<h4><a name="_Toc241653483">解法</a>2 最大封闭子图</h4>
<h5><a name="_Toc241653484">算法描述</a></h5>
<p>将图转置后发现，一个合法的攻击方案是一个<strong>封闭子图</strong>(Closure of a Graph)，我们的目标就是最大化攻击方案的点权值和，就是要求一个<strong>最大封闭子图</strong>(Maximum Weight Closure of a Graph)，只需转化为网络流模型，即可解决。</p>
<h5><a name="_Toc241653485">算法分析</a></h5>
<p>样例的图转置后如下，其最大封闭子图为{1,2,4}。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image8.png" border="0" alt="image" width="175" height="166" /></p>
<p>最大封闭子图的玩网络流建模方法为：</p>
<p>1. 建立附加源S和附加汇T。</p>
<p>2. 图中原有的边容量设为∞。</p>
<p>3. 从S向每个权值为正的点连接一条容量为该点权值的有向边。</p>
<p>4. 从每个权值不为正的点向T连接一条容量为该点权值绝对值的有向边。</p>
<p>在网络上求S到T的网络最大流Maxflow，最大封闭子图的权值就是(所有正权点权值之和 – Maxflow)。</p>
<p>样例建模后如下图所示，求得Maxflow = 5，所以最大封闭子图的权值为(10 + 20 – 5) = 25。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image9.png" border="0" alt="image" width="175" height="404" /></p>
<p>求最大封闭子图的网络流建模方法的严格证明见胡伯涛《最小割模型在信息学竞赛中的应用》。</p>
<h5><a name="_Toc241653486">复杂度分析</a></h5>
<p>该图点数为O(NM)，边数可达O(N<sup>2</sup>M<sup>2</sup>)。拓扑排序和建图的时间为O(N<sup>2</sup>M<sup>2</sup>)，用Dinic算法求网络最大流的时间为O(|V|<sup>2</sup>|E|)，所以总时间复杂度为O(N<sup>4</sup>M<sup>4</sup>)。在实际测试中通过了所以测试点，得到100分。</p>
<h5><a name="_Toc241653487">参考程序</a></h5>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1770code4'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17704"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
</pre></td><td class="code" id="p1770code4"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
* Problem: NOI2009 pvz
* Author: Guo Jiabao
* Time: 2009.7.29 11:52
* State: Solved
* Memo: 最大封闭子图 网络最大流
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">603</span>,MAXM<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">4</span>,INF<span style="color: #000080;">=</span>~0U<span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> edge
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>next,<span style="color: #000040;">*</span>op<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> t,c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #000040;">*</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>V0<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ES<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>Stae<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fi,<span style="color: #000040;">*</span>fo<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> R,C,EC,Ans,Maxflow,Stop,S,T,N<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> score<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ind<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Lv<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Stap<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Q<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> ts<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">**</span>V,<span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> c<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #000080;">=</span> b<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #000080;">=</span> a<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> point2id<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> x <span style="color: #000040;">*</span> C <span style="color: #000040;">+</span> y <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,k,l,q,x,y,s,c<span style="color: #008080;">;</span>
	fi <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pvz.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pvz.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>R,<span style="color: #000040;">&amp;</span>C<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>R<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>C<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			k <span style="color: #000080;">=</span> point2id<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;</span>C<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				q <span style="color: #000080;">=</span> point2id<span style="color: #008000;">&#40;</span>i,j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>V0,q,k,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				ind<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>s,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			score<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> s<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>l<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>l<span style="color: #000080;">&lt;=</span>c<span style="color: #008080;">;</span>l<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>x,<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				q <span style="color: #000080;">=</span> point2id<span style="color: #008000;">&#40;</span>x,y<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>V0,k,q,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				ind<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	N<span style="color: #000080;">=</span>R<span style="color: #000040;">*</span>C<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> topsort<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	Stop <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ind<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			Stap<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Stop<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Stop<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i <span style="color: #000080;">=</span> Stap<span style="color: #008000;">&#91;</span>Stop<span style="color: #000040;">--</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		ts<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V0<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				ind<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">--</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ind<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
					Stap<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Stop<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> j<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> makegraph<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	S<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	T<span style="color: #000080;">=</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ts<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>score<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				addedge<span style="color: #008000;">&#40;</span>V,S,i,score<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				Ans <span style="color: #000040;">+</span><span style="color: #000080;">=</span> score<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
				addedge<span style="color: #008000;">&#40;</span>V,i,T,<span style="color: #000040;">-</span>score<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V0<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ts<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					addedge<span style="color: #008000;">&#40;</span>V,j,i,INF<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> Dinic_label<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,head,tail<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>Lv,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Lv<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Q<span style="color: #008000;">&#91;</span>head<span style="color: #000080;">=</span>tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> S<span style="color: #008080;">;</span>
	Lv<span style="color: #008000;">&#91;</span>S<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>head<span style="color: #000080;">&lt;=</span>tail<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i <span style="color: #000080;">=</span> Q<span style="color: #008000;">&#91;</span>head<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			j <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Lv<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Lv<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				Q<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>tail<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> j<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Dinic_aug<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,delta<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>T<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Stap<span style="color: #008000;">&#91;</span>Stop<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Stop<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i <span style="color: #000080;">=</span> Stap<span style="color: #008000;">&#91;</span>Stop<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>T<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">&amp;&amp;</span> Lv<span style="color: #008000;">&#91;</span> j <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Stap<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Stop<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> j<span style="color: #008080;">;</span>
				Stae<span style="color: #008000;">&#91;</span>Stop<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
				Stop<span style="color: #000040;">--</span>,Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			delta <span style="color: #000080;">=</span> INF<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>Stop<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Stae<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000080;">&lt;</span> delta<span style="color: #008000;">&#41;</span>
					delta <span style="color: #000080;">=</span> Stae<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>Stop<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Stae<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">-</span><span style="color: #000080;">=</span> delta<span style="color: #008080;">;</span>
				Stae<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">+</span><span style="color: #000080;">=</span> delta<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Stae<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
					Stop <span style="color: #000080;">=</span> i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			Maxflow <span style="color: #000040;">+</span><span style="color: #000080;">=</span> delta<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Dinic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Dinic_label<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		Dinic_aug<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	topsort<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	makegraph<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Dinic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans <span style="color: #000040;">-</span><span style="color: #000080;">=</span> Maxflow<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fo,<span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/usaco-545-telecowmunication/" title="USACO 5.4.5 TeleCowmunication 奶牛的电信 telecow">USACO 5.4.5 TeleCowmunication 奶牛的电信 telecow</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-solution/" title="NOI 2009 解题报告">NOI 2009 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-path/" title="NOI 2009 描边">NOI 2009 描边</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-ball/" title="NOI 2009 管道取珠">NOI 2009 管道取珠</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-treapmod/" title="NOI 2009 二叉查找树">NOI 2009 二叉查找树</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-poet/" title="NOI 2009 诗人小G">NOI 2009 诗人小G</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2009-pvz/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>线性规划与网络流24题 解题报告</title>
		<link>http://www.byvoid.com/blog/lpf24-solution/</link>
		<comments>http://www.byvoid.com/blog/lpf24-solution/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 10:36:39 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[競賽題解]]></category>
		<category><![CDATA[Dinic]]></category>
		<category><![CDATA[最小费用最大流]]></category>
		<category><![CDATA[线性规划]]></category>
		<category><![CDATA[网络最大流]]></category>
		<category><![CDATA[网络流]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1397</guid>
		<description><![CDATA[经过几天努力终于做完了线性规划与网络流24题，同时对网络流和二分图的理解也上升到了一个新的高度。把所有题解发上来供大家参考，还请多多指教。 感谢ShingRay发现本文一个错误，现已修... ]]></description>
			<content:encoded><![CDATA[<p>经过几天努力终于做完了线性规划与网络流24题，同时对网络流和二分图的理解也上升到了一个新的高度。把所有题解发上来供大家参考，还请多多指教。</p>
<p><span style="color: #ff0000;"><strong>感谢ShingRay发现本文一个错误，现已修正。</strong></span></p>
<p>BYVoid原创 <a href="http://www.byvoid.com/blog/wp-content/uploads/2009/06/lp_mf_solution_v2.zip">线性规划与网络流24题_解题报告Ver 2</a> (48KB)</p>
<p>另外附上 <a href="http://www.byvoid.com/blog/wp-content/uploads/2009/06/linearprogramming_networkflow.zip">线性规划与网络流24题</a> (1.90MB) 感谢王晓东老师给我们提供这么多好题。</p>
<p>几点说明</p>
<ol>
<li>本题解提供所有问题的解析和大部分问题的C++程序源代码，以及个别数据的勘误。</li>
<li>本题解只讨论问题的分析和建模，具体的实现参照代码。代码中所有网络最大流算法均用Dinic实现。</li>
<li>读者应具备图论、最短路径、网络流的基础知识，并掌握至少一种网络最大流和最小费用最大流的算法。</li>
<li>建议读者在阅读题解前先进行充分的思考，确认无法独立解决后再看题解。</li>
<li>问题8 机器人路径规划问题 是个经典难题，暂时还未解决，欢迎大家讨论。</li>
<li>本题解系个人原创，请勿商业转载，非商业转载请注明来源。</li>
</ol>
<p>问题一览</p>
<table style="border-collapse: collapse; width: 416pt;" border="0" cellspacing="0" cellpadding="0" width="554">
<col style="width: 62pt;" width="82"></col>
<col style="width: 122pt;" width="163"></col>
<col style="width: 141pt;" width="188"></col>
<col style="width: 91pt;" width="121"></col>
<tbody>
<tr style="height: 13.5pt;" height="18">
<td style="background: #9bbb59 none repeat scroll 0% 0%; height: 13.5pt; width: 62pt; color: white; font-weight: 700; text-decoration: none;" width="82" height="18">问题编号</td>
<td style="background: #9bbb59 none repeat scroll 0% 0%; width: 122pt; color: white; font-weight: 700; text-decoration: none;" width="163">问题名称</td>
<td style="background: #9bbb59 none repeat scroll 0% 0%; width: 141pt; color: white; font-weight: 700; text-decoration: none;" width="188">问题模型</td>
<td style="background: #9bbb59 none repeat scroll 0% 0%; width: 91pt; color: white; font-weight: 700; text-decoration: none;" width="121">转化模型</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">1</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">飞行员配对方案问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">二分图最大匹配</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">2</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">太空飞行计划问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最大权闭合图</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最小割</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">3</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最小路径覆盖问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">有向无环图最小路径覆盖</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">4</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">魔术球问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">有向无环图最小路径覆盖</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">5</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">圆桌问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">二分图多重匹配</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">6</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最长递增子序列问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最多不相交路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">7</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">试题库问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">二分图多重匹配</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">8</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">机器人路径规划问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">(未解决)</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">9</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">方格取数问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">二分图点权最大独立集</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最小割</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">10</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">餐巾计划问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">线性规划网络优化</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">11</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">航空路线问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最长不相交路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">12</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">软件补丁问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最小转移代价</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最短路径</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">13</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">星际转移问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">网络判定</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">网络最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">14</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">孤岛营救问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">分层图最短路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最短路径</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">15</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">汽车加油行驶问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">分层图最短路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最短路径</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">16</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">数字梯形问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最大权不相交路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">17</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">运输问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">网络费用流量</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">18</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">分配问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">二分图最佳匹配</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">19</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">负载平衡问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最小代价供求</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">20</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">深海机器人问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">线性规划网络优化</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">21</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最长k可重区间集问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最大权不相交路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">22</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最长k可重线段集问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">最大权不相交路径</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">23</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">火星探险问题</td>
<td style="   border: 0.5pt medium medium solid none none #9bbb59 -moz-use-text-color -moz-use-text-color;">线性规划网络优化</td>
<td style="   border: 0.5pt 0.5pt medium medium solid solid none none #9bbb59 #9bbb59 -moz-use-text-color -moz-use-text-color;">最小费用最大流</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="  " height="18">24</td>
<td style="   border: 0.5pt medium solid none #9bbb59 -moz-use-text-color;">骑士共存问题</td>
<td style="   border: 0.5pt medium solid none #9bbb59 -moz-use-text-color;">二分图最大独立集</td>
<td style="   border: 0.5pt 0.5pt 0.5pt medium solid solid solid none #9bbb59 #9bbb59 #9bbb59 -moz-use-text-color;">网络最小割</td>
</tr>
</tbody>
</table>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2008-employee/" title="NOI 2008 志愿者招募 employee">NOI 2008 志愿者招募 employee</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-gro/" title="POI 1999 洞穴探险 Speleology">POI 1999 洞穴探险 Speleology</a></li><li><a href="http://www.byvoid.com/blog/usaco-545-telecowmunication/" title="USACO 5.4.5 TeleCowmunication 奶牛的电信 telecow">USACO 5.4.5 TeleCowmunication 奶牛的电信 telecow</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-pvz/" title="NOI 2009 植物大战僵尸">NOI 2009 植物大战僵尸</a></li><li><a href="http://www.byvoid.com/blog/noip2008-message-costflow/" title="NOIP2008 传纸条 费用流建模">NOIP2008 传纸条 费用流建模</a></li><li><a href="http://www.byvoid.com/blog/noi-2006-profit/" title="NOI 2006 最大获利">NOI 2006 最大获利</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/lpf24-solution/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>NOIP2008 传纸条 费用流建模</title>
		<link>http://www.byvoid.com/blog/noip2008-message-costflow/</link>
		<comments>http://www.byvoid.com/blog/noip2008-message-costflow/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 04:05:23 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[競賽題解]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[NOIP]]></category>
		<category><![CDATA[网络流]]></category>
		<category><![CDATA[费用流]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1390</guid>
		<description><![CDATA[把问题抽象成图论问题，数学模型是求从S到T的两条不相交的路径，使得路径上点的权值之和最大。 费用流建模，首先拆点，把顶点i拆成i.a和i.b，i.a 与i.b之间连接一条费用为“好心值”，容量... ]]></description>
			<content:encoded><![CDATA[<p>把问题抽象成图论问题，数学模型是求从S到T的两条不相交的路径，使得路径上点的权值之和最大。</p>
<p>费用流建模，首先拆点，把顶点i拆成i.a和i.b，i.a 与i.b之间连接一条费用为“好心值”，容量为1的有向边，特殊地，左上角和右下角两个节点拆分后点内边容量设为2，因为我们要找两条不相交路径。i右边和下边的节点j，连接一条(i.b,j.a)费用为0，容量为1的有向边。</p>
<p>求最大费用最大流即可，费用流值就是要求的结果。比动态规划运行得快，空间占用少。<br />
<span id="more-1390"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1390code6'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13906"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
</pre></td><td class="code" id="p1390code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOIP2008 message
 * Author: Guo Jiabao
 * Time: 2009.6.24 11:52
 * State: Solved
 * Memo: 最小费用最大流
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">51</span>,MAXN<span style="color: #000080;">=</span>MAXL<span style="color: #000040;">*</span>MAXL<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span>,MAXM<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span>,INF<span style="color: #000080;">=</span>~0U<span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> Queue
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Q<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,head,tail,size<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> inq<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Queue<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>inq,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>inq<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		head<span style="color: #000080;">=</span>size <span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		tail<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> ins<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		inq<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>tail <span style="color: #000080;">&gt;=</span> MAXN<span style="color: #008000;">&#41;</span> tail <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		Q<span style="color: #008000;">&#91;</span>tail<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> p<span style="color: #008080;">;</span>
		size <span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> p<span style="color: #000080;">=</span>Q<span style="color: #008000;">&#91;</span>head<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>head <span style="color: #000080;">&gt;=</span> MAXN<span style="color: #008000;">&#41;</span> head <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		inq<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		size <span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>Q<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> edge
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>next,<span style="color: #000040;">*</span>op<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> t,c,v<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>ES<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>fe<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,EC,S,T,CostFlow<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> dist<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ft<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #000080;">=</span> b<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">=</span> v<span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #000080;">=</span> a<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>v<span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,a,b,c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;message.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;message.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			a<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>M<span style="color: #000040;">+</span>j<span style="color: #008080;">;</span>b<span style="color: #000080;">=</span>a<span style="color: #000040;">+</span>a<span style="color: #008080;">;</span>a<span style="color: #000080;">=</span>b<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			addedge<span style="color: #008000;">&#40;</span>a,b,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	ES<span style="color: #008000;">&#91;</span>EC<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #000080;">=</span>ES<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			a<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>M<span style="color: #000040;">+</span>j<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>M<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				b <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>M<span style="color: #000040;">+</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>a,b,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>N<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				b <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">*</span>M<span style="color: #000040;">+</span>j<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>a,b,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>	
	S<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> T <span style="color: #000080;">=</span> N <span style="color: #000040;">*</span> M <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">bool</span> spfa<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>T<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>INF<span style="color: #008080;">;</span>
	dist<span style="color: #008000;">&#91;</span>S<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span> Q.<span style="color: #007788;">pop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">&amp;&amp;</span> dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">&gt;</span> dist<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				dist<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
				ft<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
				fe<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> e<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>Q.<span style="color: #007788;">inq</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> dist<span style="color: #008000;">&#91;</span>T<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>INF<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> aug<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,delta<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>T<span style="color: #008080;">;</span>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>i<span style="color: #000080;">=</span>ft<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fe<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000080;">&lt;</span> delta<span style="color: #008000;">&#41;</span>
			delta <span style="color: #000080;">=</span> fe<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>T<span style="color: #008080;">;</span>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>i<span style="color: #000080;">=</span>ft<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		fe<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">-</span><span style="color: #000080;">=</span> delta<span style="color: #008080;">;</span>
		fe<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
		CostFlow <span style="color: #000040;">+</span><span style="color: #000080;">=</span> fe<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000040;">*</span> delta<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>spfa<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		aug<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,CostFlow<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noip2008-twostack/" title="NOIP2008 双栈排序 twostack 题解">NOIP2008 双栈排序 twostack 题解</a></li><li><a href="http://www.byvoid.com/blog/noip2008-return/" title="NOIP2008归来">NOIP2008归来</a></li><li><a href="http://www.byvoid.com/blog/noip-2008-train/" title="NOIP2008集训">NOIP2008集训</a></li><li><a href="http://www.byvoid.com/blog/my-highschool-2/" title="我的高中（二）爲NOIP奮鬭的日子">我的高中（二）爲NOIP奮鬭的日子</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-pvz/" title="NOI 2009 植物大战僵尸">NOI 2009 植物大战僵尸</a></li><li><a href="http://www.byvoid.com/blog/lpf24-solution/" title="线性规划与网络流24题 解题报告">线性规划与网络流24题 解题报告</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noip2008-message-costflow/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>AHOI 上学路线</title>
		<link>http://www.byvoid.com/blog/ahoi-route/</link>
		<comments>http://www.byvoid.com/blog/ahoi-route/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 12:21:42 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[競賽題解]]></category>
		<category><![CDATA[AHOI]]></category>
		<category><![CDATA[最小割集]]></category>
		<category><![CDATA[最短路径]]></category>
		<category><![CDATA[网络流]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1272</guid>
		<description><![CDATA[题目要求是删除权值之和最少的一些边，使得从1到N的最短路径变大。方法是求最短路径网络上的最小割集。首先求出从1到N的最短路径网络，方法是分别从1和N求单源最短路径，然后枚举每条... ]]></description>
			<content:encoded><![CDATA[<p>题目要求是删除权值之和最少的一些边，使得从1到N的最短路径变大。方法是求最短路径网络上的最小割集。首先求出从1到N的最短路径网络，方法是分别从1和N求单源最短路径，然后枚举每条边，如果边(a,b)满足dis(1,a) + w(a,b) + dis(b,N) = dis(1,N) ，则(a,b)是最短路径网络上的(有向)边。</p>
<p>接下来求从1到N的网络最大流，即可求出最小割集。由于是求任意一个最小割集，所以只需遍历一边残余网络，S集合与T集合之间的边，就是一个最小割集。<br />
<span id="more-1272"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1272code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12728"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
</pre></td><td class="code" id="p1272code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: HAOI2008 parterre
 * Author: Guo Jiabao
 * Time: 2009.4.21 10:23
 * State: Solved
 * Memo: 最短路径 + 网络流
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">501</span>,MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">124751</span><span style="color: #000040;">*</span><span style="color: #0000dd;">4</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> edge
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>next,<span style="color: #000040;">*</span>op<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> s,t,d,c,id<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #000040;">*</span>Vr<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ES<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>Stae<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,EC,S,T,Ecnt<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Cost<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span>,Anse<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> vis<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Lv<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Q<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Stap<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Stop<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> dinic_bfs<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,head<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,tail<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>Lv,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Lv<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Q<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>tail<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>
	Lv<span style="color: #008000;">&#91;</span>S<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>head<span style="color: #000080;">&lt;=</span>tail<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>Q<span style="color: #008000;">&#91;</span>head<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Lv<span style="color: #008000;">&#91;</span>j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Lv<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				Q<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>tail<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>j<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> dinic_augment<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,k,delta,Flow<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>T<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Stap<span style="color: #008000;">&#91;</span>Stop<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Stop<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>Stap<span style="color: #008000;">&#91;</span>Stop<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>T<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">&amp;&amp;</span> Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">==</span>Lv<span style="color: #008000;">&#91;</span>j<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Stap<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Stop<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>j<span style="color: #008080;">;</span>
				Stae<span style="color: #008000;">&#91;</span>Stop<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				Stop<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
				Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			delta<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>Stop<span style="color: #008080;">;</span>j<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>j<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Stae<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000080;">&lt;</span> delta<span style="color: #008000;">&#41;</span>
					delta<span style="color: #000080;">=</span>Stae<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008080;">;</span>
			Flow<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>Stop<span style="color: #008080;">;</span>j<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>j<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Stae<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000040;">-</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
				Stae<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Stae<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
					k<span style="color: #000080;">=</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			Stop<span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> Flow<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> dinic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Flow<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>dinic_bfs<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		Flow <span style="color: #000040;">+</span><span style="color: #000080;">=</span> dinic_augment<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> Flow<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge1<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> d,<span style="color: #0000ff;">int</span> c,<span style="color: #0000ff;">int</span> id<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span><span style="color: #000080;">=</span>Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>d<span style="color: #000080;">=</span>d<span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span><span style="color: #000080;">=</span>Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>d<span style="color: #000080;">=</span>d<span style="color: #008080;">;</span>
	Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">=</span>Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">=</span>Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span> Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
	Vr<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #000080;">=</span>Vr<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #000080;">=</span>id<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge2<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> c,<span style="color: #0000ff;">int</span> id<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">next</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span>EC<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #000080;">=</span>id<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,a,b,d,c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;routez.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;routez.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	EC<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b,<span style="color: #000040;">&amp;</span>d,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		addedge1<span style="color: #008000;">&#40;</span>a,b,d,c,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dijkstra<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> S,<span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span>sp<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,Mini<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>vis,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>vis<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		sp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	sp<span style="color: #008000;">&#91;</span>i<span style="color: #000080;">=</span>S<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>i<span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		vis<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>Vr<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>sp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>d <span style="color: #000080;">&lt;</span> sp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				sp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> sp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>d<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>Mini<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>vis<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> sp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>Mini<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Mini<span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				i<span style="color: #000080;">=</span>j<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> network<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,a,b,p<span style="color: #000080;">=</span>EC<span style="color: #008080;">;</span>
	S<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span>,T<span style="color: #000080;">=</span>N<span style="color: #008080;">;</span>
	Ecnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>p<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		a<span style="color: #000080;">=</span>ES<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span>,b<span style="color: #000080;">=</span>ES<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> ES<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">d</span> <span style="color: #000040;">+</span> sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			addedge2<span style="color: #008000;">&#40;</span>a,b,ES<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span>,ES<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> getcut<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,C<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	dinic_bfs<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Lv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> Lv<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
				Anse<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>C<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> C<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Ans1,Ans2,Ans3<span style="color: #008080;">;</span>
	dijkstra<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dijkstra<span style="color: #008000;">&#40;</span>N,sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans1<span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	network<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans3<span style="color: #000080;">=</span>dinic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans2<span style="color: #000080;">=</span>getcut<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn%d %dn&quot;</span>,Ans1,Ans2,Ans3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>Ans2<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Anse<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<div class="MainText">
<div><strong>上学路线</strong></div>
<div>可可和卡卡家住HF市的东郊，每天上学他们都要转车多次才能到达市区西端的学校。直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的。</div>
<div>可可：“很可能我们在上学的路途上浪费了大量的时间，让我们写一个程序来计算上学需要的最少时间吧！”</div>
<div>HF市一共设有 <em>N </em>个公交车站，不妨将它们编号为 1… <em>N </em>的自然数，并认为可可和卡卡家住在 1 号汽车站附近，而他们学校在 <em>N </em>号汽车站。市内有 <em>M </em>条直达汽车路线，执行第 <em>i </em>条路线的公交车 <strong>往返于 </strong>站点 <em>p </em>i 和 <em>q </em>i 之间，从起点到终点需要花费的时间为 <em>t i </em>。 (1&lt;= <em>i </em>&lt;= <em>M </em>, 1&lt;= <em>p i </em>, <em>q i </em>&lt;= <em>N </em>)</div>
<div>两个人坐在电脑前，根据上面的信息很快就编程算出了最优的乘车方案。然而可可忽然有了一个鬼点子，他想趁卡卡不备，在卡卡的输入数据中删去一些路线，从而让卡卡的程序得出的答案大于实际的最短时间。而对于每一条路线 <em>i </em>事实上都有一个代价 <em>c i </em>：删去路线的 <em>c i </em>越大卡卡就越容易发现这个玩笑，可可想知道什么样的删除方案可以达到他的目的而让被删除的公交车路线 <em>c i </em>之和最小。</div>
<div><strong><span style="font-size: medium;">[ 任务 ] </span></strong></div>
<div>编写一个程序：</div>
<div>•  从输入文件中读取HF市公交路线的信息；</div>
<div>•  计算出实际上可可和卡卡上学需要花费的最少时间；</div>
<div>•  帮助可可设计一个方案，删除输入信息中的一些公交路线，使得删除后从家到学校需要的最少时间变大，而被删除路线的 <em>c i </em>和最小；</div>
<div>•  向输出文件输出答案。</div>
<div><strong><span style="font-size: medium;">[ 输入格式 ] </span></strong></div>
<div>输入文件中第一行有两个正整数 <em>N </em>和 <em>M </em>，分别表示HF市公交车站和公交汽车路线的个数。以下 <em>M </em>行，每行（第 <em>i </em>行，总第 ( <em>i </em>+1) 行）用四个正整数描述第 <em>i </em>条路线： <em>p i </em>, <em>q i </em>, <em>t i </em>, <em>c i </em>；具体含义见上文描述。</div>
<div><strong><span style="font-size: medium;">[ 输出格式 ] </span></strong></div>
<div>输出文件最多有两行。</div>
<div>第一行中仅有一个整数，表示从可可和卡卡家到学校需要的最短时间。</div>
<div>第二行描述你为可可制定的方案，首先有两个整数 <em>K </em>和 <em>C </em>，表示总共需要删除 <em>K </em>条路线，它们的 <em>c i </em>之和为 <em>C </em>最小；</div>
<div>接着有 <em>K </em>行，每行1个 1… <em>N </em>的正整数： <em>d </em>1 , <em>d </em>2 , …, <em>d K </em>，表示需要删除的路线编号，即输入文件中顺数的编号。<strong>如果有多解，输出任意一个。</strong></div>
<div><strong><span style="font-size: medium;">[ 输入样例 ] </span></strong></div>
<div>6 7<br />
1 2 1 3<br />
2 6 1 5<br />
1 3 1 1<br />
3 4 1 1<br />
4 6 1 1<br />
5 6 1 2<br />
1 5 1 4</div>
<div><strong><span style="font-size: medium;">[ 输出样例 ] </span></strong></div>
<div>2<br />
2 5</div>
<div>16</div>
<div><strong><span style="font-size: medium;">[ 数据约束 ] </span></strong></div>
<div>2&lt;= <em>N </em>&lt;=500, 1&lt;= <em>M </em>&lt;=124 750, 1&lt;= <em>t i </em>, <em>c i </em>&lt;=10 000</div>
<div>HF市的公交网络十分发达，你可以认为任意两个车站间都可以通过直达或转车互相到达，当然如果在你提供的删除方案中，家和学校无法互相到达，那么则认为上学需要的最短为正无穷大：这显然是一个合法的方案。</div>
</div>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2009-pvz/" title="NOI 2009 植物大战僵尸">NOI 2009 植物大战僵尸</a></li><li><a href="http://www.byvoid.com/blog/lpf24-solution/" title="线性规划与网络流24题 解题报告">线性规划与网络流24题 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noip2008-message-costflow/" title="NOIP2008 传纸条 费用流建模">NOIP2008 传纸条 费用流建模</a></li><li><a href="http://www.byvoid.com/blog/noi-2007-network/" title="NOI 2007 社交网络">NOI 2007 社交网络</a></li><li><a href="http://www.byvoid.com/blog/ahoi-hole/" title="AHOI 洞窟探索">AHOI 洞窟探索</a></li><li><a href="http://www.byvoid.com/blog/ahoi2005-cross/" title="AHOI2005 穿越磁场">AHOI2005 穿越磁场</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/ahoi-route/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
