<?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/%e6%9c%80%e7%9f%ad%e8%b7%af%e5%be%84/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 2007 社交网络</title>
		<link>http://www.byvoid.com/blog/noi-2007-network/</link>
		<comments>http://www.byvoid.com/blog/noi-2007-network/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 02:22:09 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[NOI2007]]></category>
		<category><![CDATA[最短路径]]></category>
		<category><![CDATA[路径条数]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1374</guid>
		<description><![CDATA[这是NOI2007最简单的一道题了吧，考察的是细心。由于要求每对顶点的最短路径，可以用floyd求。定义path[i][j]为从i到j的最短路径的条数，floyd松弛时，要更新path[i][j] = path[i][k] * path[k][j]，如果遇... ]]></description>
			<content:encoded><![CDATA[<p>这是NOI2007最简单的一道题了吧，考察的是细心。由于要求每对顶点的最短路径，可以用floyd求。定义path[i][j]为从i到j的最短路径的条数，floyd松弛时，要更新path[i][j] = path[i][k] * path[k][j]，如果遇到dist[i][k] + dist[k][j] == dist[i][j]这样的情况，要令path[i][j] += path[i][k] * path[k][j]。</p>
<p>接下来就是根据定义求每个顶点重要程度值I了，其中C(s,t)=path[s][t]，根据乘法原理，过v的最短路径条数C(s,t,v)=path[s][v] * path[v][t]。求出I值输出即可。注意最短路径数目不超过10^10，所以要用到64位整型数来记录路径条数。</p>
<p><span id="more-1374"></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('p1374code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13742"><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
</pre></td><td class="code" id="p1374code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2007 network
 * Author: Guo Jiabao
 * Time: 2009.6.5 9:54
 * 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> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> INF<span style="color: #000080;">=</span><span style="color:#800080;">1e20</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M<span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> dist<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,path<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</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;network.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;network.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>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
			path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<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: #008000;">&#125;</span>
		dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><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;">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&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		dist<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>dist<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> floyd<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<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> I<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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;">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: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">==</span>k <span style="color: #000040;">||</span> k<span style="color: #000080;">==</span>j <span style="color: #000040;">||</span> i<span style="color: #000080;">==</span>j<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> dist<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><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>i<span style="color: #008000;">&#93;</span><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: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> dist<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> path<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> dist<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> path<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		I<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;">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>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>k <span style="color: #000040;">&amp;&amp;</span> j<span style="color: #000040;">!</span><span style="color: #000080;">=</span>k <span style="color: #000040;">&amp;&amp;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>j <span style="color: #000040;">&amp;&amp;</span> dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> dist<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					I <span style="color: #000040;">+</span><span style="color: #000080;">=</span> path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> path<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">/</span> path<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%.3lfn&quot;</span>,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;">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>
	floyd<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>
<h2><span class="mw-headline">社交网络 </span></h2>
<p>【问题描述】</p>
<p>在社交网络（social network）的研究中，我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。在一个社交圈子里有n个人，人与人之间有不同程度的关系。我 们将这个关系网络对应到一个n个结点的无向图上，两个不同的人若互相认识，则在他们对应的结点之间连接一条无向边，并附上一个正数权值c，c越小，表示两 个人之间的关系越密切。</p>
<p>我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度，注意到最短路径上的其他结点为s和t的联系提供了某种便利， 即这些结点对于s 和t之间的联系有一定的重要程度。我们可以通过统计经过一个结点v的最短路径的数目来衡量该结点在社交网络中的重要程度。</p>
<p>考虑到两个结点A和B之间可能会有多条最短路径。我们修改重要程度的定义如下：</p>
<p>令Cs,t表示从s到t的不同的最短路的数目，Cs,t(v)表示经过v从s到t的最短路的数目；则定义</p>
<p><a class="image" title="Image:Network2007 1.jpg" href="http://www.ruvtex.cn/wiki/Image:Network2007_1.jpg"><img longdesc="/wiki/Image:Network2007_1.jpg" src="http://www.ruvtex.cn/mw/images/e/e4/Network2007_1.jpg" alt="Image:Network2007 1.jpg" width="330" height="114" /></a></p>
<p>为结点v在社交网络中的重要程度。</p>
<p>为了使I(v)和Cs,t(v)有意义，我们规定需要处理的社交网络都是连通的无向图，即任意两个结点之间都有一条有限长度的最短路径。</p>
<p>现在给出这样一幅描述社交网络s的加权无向图，请你求出每一个结点的重要程度。</p>
<p>【输入文件】</p>
<p>输入文件中第一行有两个整数，n和m，表示社交网络中结点和无向边的数目。在无向图中，我们将所有结点从1到n进行编号。</p>
<p>接下来m行，每行用三个整数a, b, c描述一条连接结点a和b，权值为c的无向边。注意任意两个结点之间最多有一条无向边相连，无向图中也不会出现自环（即不存在一条无向边的两个端点是相同的结点）。</p>
<p>【输出文件】</p>
<p>输出文件包括n行，每行一个实数，精确到小数点后3位。第i行的实数表示结点i在社交网络中的重要程度。</p>
<p>【样例输入】</p>
<pre>4 4
1 2 1
2 3 1
3 4 1
4 1 1</pre>
<p>【样例输出】</p>
<pre>1.000
1.000
1.000
1.000</pre>
<p>【样例说明】</p>
<p>社交网络如下图所示。</p>
<p><a class="image" title="Image:Network2007 2.jpg" href="http://www.ruvtex.cn/wiki/Image:Network2007_2.jpg"><img longdesc="/wiki/Image:Network2007_2.jpg" src="http://www.ruvtex.cn/mw/images/1/1a/Network2007_2.jpg" alt="Image:Network2007 2.jpg" width="450" height="334" /></a></p>
<p>对于1号结点而言，只有2号到4号结点和4号到2号结点的最短路经过1号结点，而2号结点和4号结点之间的最短路又有2条。因而根据定义，1号结点的重要程度计算为1/2+1/2=1。由于图的对称性，其他三个结点的重要程度也都是1。</p>
<p>【评分方法】</p>
<p>本题没有部分分，仅当你的程序计算得出的各个结点的重要程度与标准输出相差不超过0.001时，才能得到测试点的满分，否则不得分。</p>
<p>【数据规模和约定】</p>
<ul>
<li>50%的数据中：n ≤10，m ≤45</li>
<li>100%的数据中：n ≤100，m ≤4 500，任意一条边的权值c是正整数，满足：1 ≤c ≤1 000。</li>
<li>所有数据中保证给出的无向图连通，且任意两个结点之间的最短路径数目不超过10^10。</li>
</ul>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2007-necklace/" title="NOI 2007 项链工厂">NOI 2007 项链工厂</a></li><li><a href="http://www.byvoid.com/blog/ahoi-route/" title="AHOI 上学路线">AHOI 上学路线</a></li><li><a href="http://www.byvoid.com/blog/ahoi2005-cross/" title="AHOI2005 穿越磁场">AHOI2005 穿越磁场</a></li><li><a href="http://www.byvoid.com/blog/haoi-2005-route/" title="HAOI 2005 路由选择问题">HAOI 2005 路由选择问题</a></li><li><a href="http://www.byvoid.com/blog/pku-3255/" title="pku 3255 Roadblocks">pku 3255 Roadblocks</a></li><li><a href="http://www.byvoid.com/blog/noi-1999-solution/" title="NOI 1999 解题报告">NOI 1999 解题报告</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2007-network/feed/</wfw:commentRss>
		<slash:comments>0</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('p1272code4'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12724"><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="p1272code4"><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>
		<item>
		<title>AHOI2005 穿越磁场</title>
		<link>http://www.byvoid.com/blog/ahoi2005-cross/</link>
		<comments>http://www.byvoid.com/blog/ahoi2005-cross/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 13:18:46 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[競賽題解]]></category>
		<category><![CDATA[BFS]]></category>
		<category><![CDATA[Floodfill]]></category>
		<category><![CDATA[最短路径]]></category>
		<category><![CDATA[染色]]></category>
		<category><![CDATA[离散化]]></category>
		<category><![CDATA[骗分导论]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1258</guid>
		<description><![CDATA[这道题道德解法是离散化+染色+BFS最短路径。首先，由于坐标范围很大，离散化处理是很有必要的，这样可以把坐标范围从10000压缩到210以内。在离散化以后的格子中进行一次Floodfill，对每个封... ]]></description>
			<content:encoded><![CDATA[<p>这道题道德解法是离散化+染色+BFS最短路径。首先，由于坐标范围很大，离散化处理是很有必要的，这样可以把坐标范围从10000压缩到210以内。在离散化以后的格子中进行一次Floodfill，对每个封闭区域进行染色处理。接下来，把每个染色区域看成图中的一个顶点，相邻的染色区域建立一条权值为1的无向边。最后，求S到T所在染色区域对应顶点之间的最短路径，由于边权全部为1，只需一边BFS即可。</p>
<p>这道题是大名鼎鼎的《骗分导论》上的一道例题，除了骗分以外，这种解法也是非常好的。<br />
<span id="more-1258"></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('p1258code6'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12586"><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
210
211
212
</pre></td><td class="code" id="p1258code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: AHOI2005 cross
 * Author: Guo Jiabao
 * Time: 2009.4.17 10:32
 * State: Solved
 * Memo: 离散化 + 染色 + BFS
*/</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;">101</span>,MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">405</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span>,MAXC<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span>MAXN<span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> dx<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#125;</span>,dy<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</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> Queue
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Q<span style="color: #008000;">&#91;</span>MAXC<span style="color: #008000;">&#93;</span>,head,tail,size<span style="color: #008080;">;</span>
	Queue<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</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>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>tail<span style="color: #000080;">&gt;=</span>MAXC<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> r<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>MAXC<span style="color: #008000;">&#41;</span> head<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> r<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: #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>MAXC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x,y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>S,T,Rect<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>,MaxP<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,CP,Color,Start,Target,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> TK<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Bel<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Dist<span style="color: #008000;">&#91;</span>MAXC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</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,x,y,c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;cross.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;cross.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&quot;</span>,<span style="color: #000040;">&amp;</span>N<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: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>x,<span style="color: #000040;">&amp;</span>y,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Rect<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x<span style="color: #008080;">;</span>Rect<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>y<span style="color: #008080;">;</span>
		Rect<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x<span style="color: #000040;">+</span>c<span style="color: #008080;">;</span>Rect<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>y<span style="color: #000040;">+</span>c<span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>CP<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>Rect<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> P<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>CP<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>Rect<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</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>S.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>S.<span style="color: #007788;">y</span>,<span style="color: #000040;">&amp;</span>T.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>T.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	P<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>CP<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>S<span style="color: #008080;">;</span> P<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>CP<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>T<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmpx<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point <span style="color: #000040;">*</span>A<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>a, <span style="color: #000040;">*</span>B<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">-</span> B<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmpy<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point <span style="color: #000040;">*</span>A<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>a, <span style="color: #000040;">*</span>B<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y <span style="color: #000040;">-</span> B<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dispose<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<span style="color: #008080;">;</span>point PT<span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">100000</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">100000</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
	MaxP.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>MaxP.<span style="color: #007788;">y</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>PT<span style="color: #008080;">;</span>TK<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><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: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,CP,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmpx<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>CP<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		TK<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>TK<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</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: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #000040;">!</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008000;">&#41;</span>
			TK<span style="color: #008000;">&#91;</span>i<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>TK<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> MaxP.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span>
			MaxP.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>TK<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;">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>CP<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: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #000080;">=</span>TK<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,CP,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmpy<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>CP<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		TK<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>TK<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</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: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #000040;">!</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #008000;">&#41;</span>
			TK<span style="color: #008000;">&#91;</span>i<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>TK<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> MaxP.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
			MaxP.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>TK<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;">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>CP<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: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #000080;">=</span>TK<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;">inline</span> <span style="color: #0000ff;">bool</span> inrange<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: #000080;">&gt;=</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #000080;">&lt;=</span>MaxP.<span style="color: #007788;">x</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&lt;=</span>MaxP.<span style="color: #007788;">y</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;">inline</span> <span style="color: #0000ff;">bool</span> inrect<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> y,<span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> x<span style="color: #000080;">&gt;=</span>Rect<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #000080;">&lt;</span>Rect<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&gt;=</span>Rect<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&lt;</span>Rect<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">bool</span> cross<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x1,<span style="color: #0000ff;">int</span> y1,<span style="color: #0000ff;">int</span> x2,<span style="color: #0000ff;">int</span> y2<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<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;">if</span> <span style="color: #008000;">&#40;</span>inrect<span style="color: #008000;">&#40;</span>x1,y1,i<span style="color: #008000;">&#41;</span> <span style="color: #000040;">^</span> inrect<span style="color: #008000;">&#40;</span>x2,y2,i<span style="color: #008000;">&#41;</span><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: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dfscolor<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;">int</span> k,tx,ty<span style="color: #008080;">;</span>
	Bel<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Color<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		tx<span style="color: #000080;">=</span>x<span style="color: #000040;">+</span>dx<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> ty<span style="color: #000080;">=</span>y<span style="color: #000040;">+</span>dy<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>inrange<span style="color: #008000;">&#40;</span>tx,ty<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>Bel<span style="color: #008000;">&#91;</span>tx<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>ty<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>cross<span style="color: #008000;">&#40;</span>x,y,tx,ty<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			dfscolor<span style="color: #008000;">&#40;</span>tx,ty<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;">void</span> floodfill<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x,y<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;</span>MaxP.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<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>y<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>y<span style="color: #000080;">&lt;</span>MaxP.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>y<span style="color: #000040;">++</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><span style="color: #000040;">!</span>Bel<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Color<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				dfscolor<span style="color: #008000;">&#40;</span>x,y<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>
<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>
	edge e<span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#125;</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><span style="color: #0000dd;">new</span> edge<span style="color: #008000;">&#40;</span>e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<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> x,y,tx,ty,k,a,b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;=</span>MaxP.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<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>y<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>y<span style="color: #000080;">&lt;=</span>MaxP.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>y<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			a<span style="color: #000080;">=</span>Bel<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">==</span>S.<span style="color: #007788;">x</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">==</span>S.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
				Start<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">==</span>T.<span style="color: #007788;">x</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">==</span>T.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
				Target<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				tx<span style="color: #000080;">=</span>x<span style="color: #000040;">+</span>dx<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> ty<span style="color: #000080;">=</span>y<span style="color: #000040;">+</span>dy<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>inrange<span style="color: #008000;">&#40;</span>tx,ty<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					b<span style="color: #000080;">=</span>Bel<span style="color: #008000;">&#91;</span>tx<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>ty<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					addedge<span style="color: #008000;">&#40;</span>a,b<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>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> 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<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>Dist,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Dist<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>Start<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Dist<span style="color: #008000;">&#91;</span>Start<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>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>Dist<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>
			<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><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>Target<span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">return</span><span style="color: #008080;">;</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: #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>
	dispose<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	floodfill<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>
	BFS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans<span style="color: #000080;">=</span>Dist<span style="color: #008000;">&#91;</span>Target<span style="color: #008000;">&#93;</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>,Ans<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">
<p><a href="http://www.ruvtex.cn/cogs/problem/pdetail.php?pid=316" target="_blank">http://www.ruvtex.cn/cogs/problem/pdetail.php?pid=316</a></p>
<p><strong>穿越磁场</strong></p>
<p>探险机器人在Samuel星球上寻找一块奇特的矿石，然而此时它陷入了一片神秘的磁场区域，动弹不得。</p>
<p>探险空间站立刻扫描了这片区域，绘制出该区域的磁场分布平面图。这片区域中分布了N个磁场，每个磁场呈正方形，且边与坐标轴平行。</p>
<p>例如下图中，存在3个磁场，白点表示机器人的位置，黑点表示矿石的位置：</p>
<p><span class="image"><img longdesc="http://192.168.1.253/wiki/Image:Cross_1.gif" src="http://192.168.1.253/mw/images/e/ea/Cross_1.gif" alt="Image:Cross 1.gif" width="355" height="192" /></span></p>
<p>科学家们分析平面图，进一步发现：这些磁场为大小不一的正方形，可能相交，甚至覆盖，但是它们的边缘不会重合，顶点也不会重合。</p>
<p>例如下面的两种情形是不会出现的：</p>
<p><img longdesc="/wiki/Image:Cross_2.gif" src="http://192.168.1.253/mw/images/c/ca/Cross_2.gif" alt="Image:Cross 2.gif" width="375" height="122" /></p>
<p>科学家们给探险机器人启动了磁力罩，这样它就可以在磁场中自由穿越了。</p>
<p>初始时，探险机器人和所有矿石都不在任何磁场的边缘。由于技术限制，在穿越过程中机器人只能够水平或垂直移动，且不能够沿着磁场的边缘行动。</p>
<p>由于磁力罩的能量有限，科学家们希望探险机器人穿越尽量少的磁场边缘采集到这块矿石。例如上图中，探险机器人最少需要穿越两次磁场边缘。</p>
<p>现在小联请你编写程序，帮助科学家们设计探险机器人的路线，统计探险机器人最少需要穿越多少次磁场边缘。<br />
输入：第一行有一个整数N，表示有N个磁场（1 &lt; N &lt; 100）。随后有N行，每行有三个整数X、Y、C（0 &lt; X ,Y ,C &lt; 10000），表示一个磁场左下角坐标为（X,Y），边长为C。接下来有一行，共有四个整数SX, SY, TX, TY，表示机器人初始坐标为（SX, SY），矿石坐标为（TX，TY）（其中，1 &lt; SX, SY, TX, TY &lt; 10000）。<br />
输出：单行输出一个整数，表示机器人最少需要穿越多少次磁场边缘。<br />
样例：</p>
<p>输入：</p>
<pre>2
1 3 3
2 1 4
0 0 3 4</pre>
<p>输出：</p>
<pre>2</pre>
</div>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/usaco-242-overfencing/" title="USACO 2.4.2 Overfencing 穿越栅栏">USACO 2.4.2 Overfencing 穿越栅栏</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-route/" title="AHOI 上学路线">AHOI 上学路线</a></li><li><a href="http://www.byvoid.com/blog/haoi-2005-route/" title="HAOI 2005 路由选择问题">HAOI 2005 路由选择问题</a></li><li><a href="http://www.byvoid.com/blog/pku-3255/" title="pku 3255 Roadblocks">pku 3255 Roadblocks</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/ahoi2005-cross/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HAOI 2005 路由选择问题</title>
		<link>http://www.byvoid.com/blog/haoi-2005-route/</link>
		<comments>http://www.byvoid.com/blog/haoi-2005-route/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 06:54:18 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[競賽題解]]></category>
		<category><![CDATA[HAOI]]></category>
		<category><![CDATA[最短路径]]></category>
		<category><![CDATA[次短路径]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1218</guid>
		<description><![CDATA[前两问是最短路，第三问是标准的次短路径。求法是先求出最短路径，然后枚举每条从S到T的最短路径上的边，删除以后再求一次最短路径，保留最小值就是次短路径。 ?View Code CPP1 2 3 4 5 6 7 8 9 ... ]]></description>
			<content:encoded><![CDATA[<p>前两问是最短路，第三问是标准的次短路径。求法是先求出最短路径，然后枚举每条从S到T的最短路径上的边，删除以后再求一次最短路径，保留最小值就是次短路径。<br />
<span id="more-1218"></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('p1218code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12188"><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
</pre></td><td class="code" id="p1218code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: HAOI2005 route
 * Author: Guo Jiabao
 * Time: 2009.4.14 14:05
 * State: Solved
 * Memo: Dijkstra 次短路径
*/</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;">51</span>,MAXM<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</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> t,c<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>SPE<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,S,T,P,SPC,S0,S1,S2,EC<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> sp<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> mf<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,vis<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> 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>c<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;">int</span> adjm<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</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,c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;route.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;route.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%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>S,<span style="color: #000040;">&amp;</span>T<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>N<span style="color: #008080;">;</span>j<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&quot;</span>,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			adjm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;=</span>j <span style="color: #000040;">&amp;&amp;</span> adjm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>adjm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				c<span style="color: #000080;">=</span><span style="color: #0000dd;">1575</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&lt;</span>j <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #008000;">&#41;</span>
				addedge<span style="color: #008000;">&#40;</span>i,j,c<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: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<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>P<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&quot;</span>,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mf<span style="color: #008000;">&#91;</span>c<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: #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: #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: #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,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>
	sp<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;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>S<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>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><span style="color: #000040;">!</span>mf<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: #000040;">&amp;&amp;</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>c <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>c<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		Mini<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>i<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>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> dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<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>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;">int</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>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000080;">==</span> sp<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>
			SPE<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>SPC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #008080;">;</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: #008000;">&#41;</span>
				dfs<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;">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> i,c<span style="color: #008080;">;</span>
	S2<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	dijkstra<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	S0<span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>T<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>mf,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>mf<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dijkstra<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	S1<span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>T<span style="color: #008000;">&#93;</span><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>
	dfs<span style="color: #008000;">&#40;</span>T<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>SPC<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>SPE<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		c<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008080;">;</span>
		e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
		dijkstra<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
		c<span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>T<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">&lt;</span>S2<span style="color: #008000;">&#41;</span>
			S2<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</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 %d %dn&quot;</span>,S0,S1,S2<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">
<p class="MsoNormal"><a href="http://www.ruvtex.cn/cogs/problem/pdetail.php?pid=22" target="_blank">http://www.ruvtex.cn/cogs/problem/pdetail.php?pid=22</a></p>
<p class="MsoNormal"><span style="font-family: 宋体;">【问题描述】</span></p>
<p class="MsoNormal">X城有一个含有N个节点的通信网络，在通信中，我们往往关心信息从一个节点I传输到节点J的最短路径。遗憾的是，由于种种原因，线路中总有一些节点会出故障，因此在传输中要避开故障节点。<br />
任务一：在己知故障节点的情况下，求避开这些故障节点，从节点I到节点J的最短路径S0。<br />
任务二：在不考虑故障节点的情况下，求从节点I到节点J的最短路径S1、第二最短路径S2。</p>
<p class="MsoNormal">【输入文件】</p>
<p class="MsoNormal">第1行： N I J (节点个数 起始节点 目标节点)<br />
第2—N+1行： Sk1 Sk2…SkN  (节点K到节点J的距离为SkJ K=1，2，……，N)<br />
最后一行： P T1 T2……Tp (故障节点的个数及编号)</p>
<p class="MsoNormal">【输出文件】</p>
<p>S0 S1 S2 (S1&lt;=S2 从节点I到节点J至少有两条不同路径)</p>
<p class="MsoNormal">【输入输出样例】</p>
<p class="MsoNormal" align="center"><span lang="EN-US"><img src="http://www.ruvtex.cn/images/t1-01.jpg" alt="" width="315" height="186" /><br />
</span></p>
<p class="MsoNormal">route.in</p>
<p>5 1 5<br />
0 10 5 0 0<br />
10 0 0 6 20<br />
5 0 0 30 35<br />
0 6 30 0 6<br />
0 20 35 6  0<br />
1 2</p>
<p>route.out</p>
<p>40 22 30</p>
<p class="MsoNormal"><span lang="EN-US">【约束条件】</span></p>
<p align="left">(1)N&lt;=50 N个节点的编号为1，2，…，N<br />
(2)Skj为整数，Skj&lt;=100，(K，J=1，2…，N  若Skj=0表示节点K到节点J没线路)<br />
(3)P&lt;=5<span lang="EN-US"> </span></p>
</div>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/pku-3255/" title="pku 3255 Roadblocks">pku 3255 Roadblocks</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/haoi2009-coming/" title="HAOI2009 即将到来">HAOI2009 即将到来</a></li><li><a href="http://www.byvoid.com/blog/ahoi-route/" title="AHOI 上学路线">AHOI 上学路线</a></li><li><a href="http://www.byvoid.com/blog/haoi-2007-parterre/" title="HAOI 2007 修筑绿化带">HAOI 2007 修筑绿化带</a></li><li><a href="http://www.byvoid.com/blog/haoi-2008-name/" title="HAOI 2008 玩具取名">HAOI 2008 玩具取名</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/haoi-2005-route/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
