<?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; POI</title>
	<atom:link href="http://www.byvoid.com/blog/tag/poi/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>POI 2001 Glodmine 金矿</title>
		<link>http://www.byvoid.com/blog/poi-2001-kop/</link>
		<comments>http://www.byvoid.com/blog/poi-2001-kop/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 09:26:45 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[Treap]]></category>
		<category><![CDATA[扫描]]></category>
		<category><![CDATA[求和]]></category>
		<category><![CDATA[点覆盖]]></category>
		<category><![CDATA[离散化]]></category>
		<category><![CDATA[统计]]></category>
		<category><![CDATA[递推]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=849</guid>
		<description><![CDATA[发现坐标的范围很大，而点并不是很多，首先想到了离散化的方法。然后横向扫描每个带状的区间，对于每个带状区间，再纵向扫描其中点的个数。这种方法是最容易想到的，但是时间复杂度... ]]></description>
			<content:encoded><![CDATA[<p>发现坐标的范围很大，而点并不是很多，首先想到了离散化的方法。然后横向扫描每个带状的区间，对于每个带状区间，再纵向扫描其中点的个数。这种方法是最容易想到的，但是时间复杂度却高达O(N^2logN)。关键在于优化每次确定带状区间的纵向扫描。</p>
<p>显然对于确定的带状区间，我们扫描时只需考虑它们的纵坐标。如果我们把一个纵坐标为y的点描述成两个事件(y,1)和 (y+h+1,-1)，然后把所有事件按照第一关键字排序，定义S[i]为前i项事件的第二关键字之和，那么Max{S[i]}就是确定的带状区间内高度 为w的矩形最多覆盖到的点数。为什么是这样，我们可以想象有两个挡板，分别是y=A-h-1(下板)和y=A(上板)，从下向上移动挡板，从而确定一个矩 形。某个点的第一个事件为(y,1)，当上板A=y时，该点被覆盖，若A继续增大，使得A-h-1=y，该点就恰好离开了覆盖区域，反过来我们可以以为是 A=y+h+1，所以定义第二个事件为(y+h+1,-1)。这样，前i个事件的第二关键字和S[i]，就代表了矩形在某个位置时覆盖的点数。S[i]的 最大值就是确定的带状区间内最大的覆盖点数。</p>
<p>带状区间的左右扫描，也可以考虑成两个挡板之间的问题，首先确定挡板的初始位置在最左端，依次向右移动左右两个挡板。确定一个区间后，统 计点事件的最大前缀和成了最关键的问题。由于左右挡板是移动的，我们需要动态统计一个排序结构。于是我们想到了用平衡树，维护每个点事件的第一关键字(y 坐标)升序，并记录权。移动右挡板时，把右挡边新位置所在线上的所有点对应的两个点事件加入平衡树；移动左挡板时，把左挡板时，把左挡边所在线上的所有点 事件从平衡树中删除。</p>
<p>为了快速统计出最大的前缀和，在此基础上，我们还需要对于平衡树中每个节点维护其子树所有节点权值和，以及子树中最大的前缀和。定义p的权值为p.w，以节点p为根的子树的权值和为p.s，以节点p为根的子树的最大的前缀和为p.m，我们可以递推算出p.m的值。</p>
<pre>p.m=Max{
	p.left.m; //最大前缀和的尾元素在左子树
	p.left.s+p.w; //最大前缀和的尾元素就是p
	p.left.s+p.w+p.right.m; //最大前缀和的尾元素在右子树
}</pre>
<p>于是全部序列的最大前缀和就是根节点root.m。</p>
<p>于是得到的算法如下：</p>
<ol>
<li>建立离散化坐标系;</li>
<li>左右扫描，确定带状区间，维护平衡树中节点;</li>
<li>统计对于确定带状区间，平衡树中元素最大的前缀和;</li>
</ol>
<p>算法总的时间复杂度为O(NlogN)，可以解决问题了。编程中细节要注意，尤其是在于平衡树维护平衡性时要对节点m值重新计算。我用了 Treap，在插入一个点要旋转时，注意要先重新计算旋转到子树的点的m值，再计算子树根节点的m值。而删除仅仅懒惰删除即可，重要的是维护m值。<br />
<span id="more-849"></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('p849code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8492"><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
</pre></td><td class="code" id="p849code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI2001 kop
 * Author: Guo Jiabao
 * Time: 2009.2.7 16:16
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">15001</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><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> linknode<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> s<span style="color: #008080;">;</span>linknode <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">class</span> Treap_node
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		Treap_node <span style="color: #000040;">*</span>left,<span style="color: #000040;">*</span>right<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> fix,weight,sum,m,key<span style="color: #008080;">;</span>
		Treap_node<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> tk,<span style="color: #0000ff;">int</span> w<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>key<span style="color: #008000;">&#40;</span>tk<span style="color: #008000;">&#41;</span>,weight<span style="color: #008000;">&#40;</span>w<span style="color: #008000;">&#41;</span>,sum<span style="color: #008000;">&#40;</span>w<span style="color: #008000;">&#41;</span>,m<span style="color: #008000;">&#40;</span>w<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>fix<span style="color: #000080;">=</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>left<span style="color: #000080;">=</span>right<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;">inline</span> <span style="color: #0000ff;">int</span> leftsum <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> left <span style="color: #008080;">?</span>left <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> rightsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> right<span style="color: #008080;">?</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> H,W<span style="color: #008080;">;</span><span style="color: #666666;">//区域高度 宽度</span>
<span style="color: #0000ff;">int</span> N,L,Lc<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,MaxAns<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> D<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
point P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
linknode LS<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>Line<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
Treap_node <span style="color: #000040;">*</span>Treap_root<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Treap_Rotate_Right<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	Treap_node <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rightsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rightsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rightsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Treap_Rotate_Left<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	Treap_node <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>leftsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>leftsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>leftsum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Treap_maintain<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> lm,ls,rm<span style="color: #008080;">;</span>
	lm<span style="color: #000080;">=</span>ls<span style="color: #000080;">=</span>rm<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span>
		lm<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m,ls<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span>
		rm<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #000080;">=</span>lm<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight <span style="color: #000080;">&gt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008000;">&#41;</span>	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m <span style="color: #000080;">=</span> ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight <span style="color: #000040;">+</span> rm <span style="color: #000080;">&gt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008000;">&#41;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #000080;">=</span>ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight <span style="color: #000040;">+</span> rm<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Treap_edit<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> v,<span style="color: #0000ff;">int</span> delta<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>p<span style="color: #008000;">&#41;</span>
		p<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> Treap_node<span style="color: #008000;">&#40;</span>v,delta<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> v <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>key <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			Treap_edit<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v,delta<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left <span style="color: #000040;">&amp;&amp;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Treap_Rotate_Right<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				Treap_maintain<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			Treap_maintain<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</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> v <span style="color: #000080;">&gt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>key <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			Treap_edit<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v,delta<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right <span style="color: #000040;">&amp;&amp;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Treap_Rotate_Left<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				Treap_maintain<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			Treap_maintain<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			Treap_maintain<span style="color: #008000;">&#40;</span>p<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>
&nbsp;
<span style="color: #0000ff;">void</span> linktable_ins<span style="color: #008000;">&#40;</span>linknode <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		linknode <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>LS<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Lc<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>t<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
		p<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>LS<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Lc<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	LS<span style="color: #008000;">&#91;</span>Lc<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;kop.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;kop.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>W,<span style="color: #000040;">&amp;</span>H,<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><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>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp<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>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> discrete<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//离散化横坐标 建立链表</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,lastv<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;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<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>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	L<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: #008000;">&#123;</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: #007788;">x</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>lastv<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			lastv<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
			D<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>L<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: #007788;">x</span><span style="color: #008080;">;</span>
			linktable_ins<span style="color: #008000;">&#40;</span>Line<span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			linktable_ins<span style="color: #008000;">&#40;</span>Line<span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> RemoveLine<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;">for</span> <span style="color: #008000;">&#40;</span>linknode <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>Line<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000040;">+</span>H<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> AddLine<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;">for</span> <span style="color: #008000;">&#40;</span>linknode <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>Line<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000040;">+</span>H<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #0000ff;">void</span> scanx<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//横向扫描 确定区间</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Lb,Rb<span style="color: #008080;">;</span>
	AddLine<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>Lb<span style="color: #000080;">=</span>Rb<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Rb<span style="color: #000080;">&lt;</span>L <span style="color: #000040;">&amp;&amp;</span> Lb<span style="color: #000080;">&lt;=</span>L<span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Rb<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>L <span style="color: #000040;">&amp;&amp;</span> D<span style="color: #008000;">&#91;</span>Rb<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>D<span style="color: #008000;">&#91;</span>Lb<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;=</span>W<span style="color: #008000;">&#41;</span>
			AddLine<span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Rb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Treap_root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #000080;">&gt;</span>MaxAns<span style="color: #008000;">&#41;</span>
			MaxAns<span style="color: #000080;">=</span>Treap_root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008080;">;</span>
		RemoveLine<span style="color: #008000;">&#40;</span>Lb<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	discrete<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	scanx<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&quot;</span>,MaxAns<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">金矿 </span></h2>
<p>问题描述</p>
<p>金矿的老师傅年底要退休了。经理为了奖赏他的尽职尽责的工作，决定在一块包含 n(n ≤ 15000) 个采金点的长方形土地中划出一块长度为 S ，宽度为 W 的区域奖励给他(1 ≤ s , w ≤ 10 000)。老师傅可以自己选择这块地的位置，显然其 中包含的采金点越多越好。你的任务就是计算最多能得到多少个采金点。如果一个采金点的位置在长方形的边上，它也应当被计算在内。</p>
<p>输入格式</p>
<p>输入文件的第一行有两个整数,中间用一个空格隔开，表示长方形土地的长和宽即s和w(1&lt;=s,w&lt;=10 000)。第二行有一个整数n(1&lt;=n&lt;=15 000)，表示金矿数量。下面的n行与金矿相对应，每行两个整数x和y (-30 000&lt;=x,y&lt;=30 000),中间用一个空格隔开，表示金矿的坐标。</p>
<p>输出格式</p>
<p>输出文件只有一个整数，表示选择的最大金矿的数。</p>
<p>输入样例</p>
<pre>1 2
12
0 0
1 1
2 2
3 3
4 5
5 5
4 2
1 4
0 5
5 0
2 3
3 2</pre>
<p>输出样例</p>
<pre>4</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-2001-prz/" title="POI 2001 Intervals 区间">POI 2001 Intervals 区间</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-map/" title="POI 2001 Density Map 密度图">POI 2001 Density Map 密度图</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pch/" title="POI 2001 Wandering flea trainers 跳舞蝇的教练">POI 2001 Wandering flea trainers 跳舞蝇的教练</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pod/" title="POI 2001 Travel 旅行">POI 2001 Travel 旅行</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-mro/" title="POI 2001 Ants and the ladybug 蚂蚁和瓢虫">POI 2001 Ants and the ladybug 蚂蚁和瓢虫</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-2001-kop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>POI 2001 Wandering flea trainers 跳舞蝇的教练</title>
		<link>http://www.byvoid.com/blog/poi-2001-pch/</link>
		<comments>http://www.byvoid.com/blog/poi-2001-pch/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 11:38:46 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[内向树]]></category>
		<category><![CDATA[图论]]></category>
		<category><![CDATA[括号序列]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=844</guid>
		<description><![CDATA[题上描述这种图是很特殊的，每个顶点只有一条指出去的有向边，而且一定存在一个环，哪怕是自环，从任意一个顶点出发，最终一定进入一个环。我们的任务的判断这样的两个图是否同构。 ... ]]></description>
			<content:encoded><![CDATA[<p>题上描述这种图是很特殊的，每个顶点只有一条指出去的有向边，而且一定存在一个环，哪怕是自环，从任意一个顶点出发，最终一定进入一个环。我们的任务的判断这样的两个图是否同构。</p>
<p>首先，这个图不一定是弱连通的，可能会有多个连通分量，我们需要考虑每个连通分量。每个连通分量中一定存在一个环，去掉环上的边以后，剩下 的是一个森林，每棵树都是内向树。实际上它是环状内向树森林。对于两个内向树，我们可以很容易地判断它们是否同构，于是我们有了解决问题的方法。</p>
<p>首先是两个内向树，如果它们同构，它们的括号序列一定相同，反之也成立。判断两个环状内向树森林同构，首先应该满足环的大小相同，如果两 个环的顶点数都不一样，那么它们一定不会同构。如果环大小相同，则需要枚举两个环上的对应点，然后判断以环上每个顶点为根的内向树是否都同构。用上述方法 可以判断两个连通分量是否同构，对于题中给的两个图，首先判断连通分量的个数是否相同，然后用搜索的方法确定一个对应关系，以此判断每个每对连通分量是否 同构。如果存在一种对应方案使得所有的连通分量通过，那么这两个图同构。</p>
<p>上述方法中，生成所有内向树括号序列需要O(N^2logN)时间(需要排序)，枚举每个环的对应关系需要O(N)，判断两个内向树括号 序列相同需要O(N)，枚举连通分量间的对应关系由于是搜索，尽管实际搜索的很少，但是从时间复杂度上分析仍然是O(N!)。每个文件有D个测试数据，于 是总的时间复杂度是O((N^2logN+N^2*N!)*D)。但是实际上这个时间复杂度由于全部从最坏情况考虑(实际上所有最坏的情况不可能同时达 到)，所以是相当悲观的估计。实际编程对于N&lt;=2000，已经可以完全应付了。</p>
<p>在编程实现的时候，许多地方要用到链表，否则空间是不够用的。细节不容忽视。</p>
<p>关于内向树以及生成括号序列，请参看<a href="http://www.byvoid.com/blog/directed-tree-bracket-sequence/" target="_blank">有向树与树的括号序列表示法</a>。<br />
<span id="more-844"></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('p844code4'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8444"><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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
</pre></td><td class="code" id="p844code4"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI2001 pch
 * Author: Guo Jiabao
 * Time: 2009.2.5 14:05
 * State: Solved 
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;string&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;">4001</span>,PERN<span style="color: #000080;">=</span><span style="color: #0000dd;">2000</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> edge<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> t<span style="color: #008080;">;</span>edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> sequence<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> len<span style="color: #008080;">;</span>string s<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> subsq<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> len<span style="color: #008080;">;</span>string <span style="color: #000040;">*</span>s<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">class</span> linknode
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		linknode <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
		T s<span style="color: #008080;">;</span>
		linknode<span style="color: #008000;">&#40;</span>T ts<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>next<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>,s<span style="color: #008000;">&#40;</span>ts<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">class</span> linklist
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		linknode<span style="color: #000080;">&lt;</span>T<span style="color: #000080;">&gt;</span> <span style="color: #000040;">*</span>f,<span style="color: #000040;">*</span>l<span style="color: #008080;">;</span>
		linklist<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>f<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>,l<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> ins<span style="color: #008000;">&#40;</span>T s<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>l<span style="color: #008000;">&#41;</span>l<span style="color: #000080;">=</span>l<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> linknode<span style="color: #000080;">&lt;</span>T<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> f<span style="color: #000080;">=</span>l<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> linknode<span style="color: #000080;">&lt;</span>T<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> clear<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			linknode<span style="color: #000080;">&lt;</span>T<span style="color: #000080;">&gt;</span> <span style="color: #000040;">*</span>a<span style="color: #000080;">=</span>f,<span style="color: #000040;">*</span>b<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>b<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>a<span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span><span style="color: #0000dd;">delete</span> b<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
			f<span style="color: #000080;">=</span>l<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: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> D,N,Ec,Bc,S1,S2<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Bel<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #666666;">//每个顶点所属连通分量</span>
<span style="color: #0000ff;">int</span> TB<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,TC<span style="color: #008080;">;</span> <span style="color: #666666;">//暂存正向搜索的连通分量</span>
linklist<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> Circle<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//链表存储每个圈</span>
<span style="color: #0000ff;">bool</span> inCircle<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//记录每个节节点</span>
<span style="color: #0000ff;">bool</span> used<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//生成排列时DFS用到的记录数组</span>
sequence seq<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//每个子树的括号序列</span>
<span style="color: #0000ff;">int</span> Cs<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//每个圈的大小</span>
edge E<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #666666;">//边集的空间</span>
edge <span style="color: #000040;">*</span>Ap<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>An<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #666666;">//正图和逆图的邻接表</span>
subsq S<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #666666;">//暂存括号序列</span>
&nbsp;
<span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>A,<span style="color: #0000ff;">int</span> t<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		edge <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>A<span style="color: #008080;">;</span>
		A<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>E<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Ec<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>t<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		A<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>E<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Ec<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	E<span style="color: #008000;">&#91;</span>Ec<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #000080;">=</span>t<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,t<span style="color: #008080;">;</span>
	Ec<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Bc<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>Ap,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Ap<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>An,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>An<span style="color: #008000;">&#41;</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&quot;</span>,<span style="color: #000040;">&amp;</span>t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		addedge<span style="color: #008000;">&#40;</span>Ap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		addedge<span style="color: #008000;">&#40;</span>An<span style="color: #008000;">&#91;</span>t<span style="color: #008000;">&#93;</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Bel<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>
		seq<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		seq<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">=</span><span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
		inCircle<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>PERN<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>PERN<span style="color: #000040;">+</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&quot;</span>,<span style="color: #000040;">&amp;</span>t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		t<span style="color: #000040;">+</span><span style="color: #000080;">=</span>PERN<span style="color: #008080;">;</span>
		addedge<span style="color: #008000;">&#40;</span>Ap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		addedge<span style="color: #008000;">&#40;</span>An<span style="color: #008000;">&#91;</span>t<span style="color: #008000;">&#93;</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Bel<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>
		seq<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		seq<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">=</span><span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
		inCircle<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> connect_dfs_n<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> u<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//逆向求连通分量</span>
<span style="color: #008000;">&#123;</span>
	Bel<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Bc<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>An<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<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> v<span style="color: #000080;">=</span>k<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><span style="color: #000040;">!</span>Bel<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			connect_dfs_n<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> connect_dfs_p<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> u<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//正向求连通分量，并查找圈</span>
<span style="color: #008000;">&#123;</span>
	Bel<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Bc<span style="color: #008080;">;</span>
	TB<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>TC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>u<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> v<span style="color: #000080;">=</span>Ap<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><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><span style="color: #000040;">!</span>Bel<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</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>connect_dfs_p<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>r<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #000040;">++</span>Cs<span style="color: #008000;">&#91;</span>Bc<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			Circle<span style="color: #008000;">&#91;</span>Bc<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>u<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			inCircle<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>r<span style="color: #000080;">==</span>u<span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #000040;">++</span>Cs<span style="color: #008000;">&#91;</span>Bc<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		Circle<span style="color: #008000;">&#91;</span>Bc<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>u<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		inCircle<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>u<span style="color: #000080;">==</span>v<span style="color: #008000;">&#41;</span> v<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> v<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> connect<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>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span>A<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>B<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><span style="color: #000040;">!</span>Bel<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>
			Bc<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			Cs<span style="color: #008000;">&#91;</span>Bc<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			TC<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			connect_dfs_p<span style="color: #008000;">&#40;</span>i<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> j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>TC<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				connect_dfs_n<span style="color: #008000;">&#40;</span>TB<span style="color: #008000;">&#91;</span>j<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: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp<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>
	<span style="color: #0000ff;">return</span>  <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>subsq <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>compare<span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>subsq <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> TreeSeq<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> u<span style="color: #008000;">&#41;</span><span style="color: #666666;">//求内向树序列</span>
<span style="color: #008000;">&#123;</span>
	linklist<span style="color: #000080;">&lt;</span>subsq<span style="color: #000080;">&gt;</span> LL<span style="color: #008080;">;</span>
	subsq T<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> L<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #000040;">++</span>seq<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #008080;">;</span>
	seq<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #FF0000;">'('</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>An<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<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> v<span style="color: #000080;">=</span>k<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>inCircle<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
		TreeSeq<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		T.<span style="color: #007788;">s</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>seq<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
		T.<span style="color: #007788;">len</span><span style="color: #000080;">=</span>seq<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #008080;">;</span>
		LL.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>linknode<span style="color: #000080;">&lt;</span>subsq<span style="color: #000080;">&gt;</span> <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span>LL.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>p<span style="color: #008080;">;</span>p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		S<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>L<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>S<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,L,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp<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>L<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		seq<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		seq<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>S<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #000040;">++</span>seq<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #008080;">;</span>
	seq<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #FF0000;">')'</span><span style="color: #008080;">;</span>
	LL.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> compare<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>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Cs<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>Cs<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//圈大小不相等</span>
	linknode<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> <span style="color: #000040;">*</span>k,<span style="color: #000040;">*</span>l,<span style="color: #000040;">*</span>pl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>pl<span style="color: #000080;">=</span>Circle<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>pl<span style="color: #008080;">;</span>pl<span style="color: #000080;">=</span>pl<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//枚举偏移量</span>
	<span style="color: #008000;">&#123;</span>
		l<span style="color: #000080;">=</span>pl<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span>Circle<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<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> x<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s,y<span style="color: #000080;">=</span>l<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>l<span style="color: #000080;">=</span>l<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> l<span style="color: #000080;">=</span>Circle<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>seq<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>seq<span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span> <span style="color: #000040;">||</span> seq<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>seq<span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//内向树序列不相同</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>k<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>
&nbsp;
<span style="color: #0000ff;">bool</span> arrange_dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//生成两图连通分量对应关系的排列</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">&gt;</span>S1<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: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span>S1<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>S2<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> compare<span style="color: #008000;">&#40;</span>k,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			used<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;">bool</span> b<span style="color: #000080;">=</span>arrange_dfs<span style="color: #008000;">&#40;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<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>
&nbsp;
<span style="color: #0000ff;">bool</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,j<span style="color: #008080;">;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	connect<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>S1<span style="color: #000080;">=</span>Bc<span style="color: #008080;">;</span>
	connect<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #000040;">+</span>PERN,N<span style="color: #000040;">+</span>PERN<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>S2<span style="color: #000080;">=</span>Bc<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>S1<span style="color: #000040;">!</span><span style="color: #000080;">=</span>S2<span style="color: #000040;">-</span>S1<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//1..S1为图1的连通分量 S1+1..S2为图2的连通分量</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//两图连通分量个数不相等</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>S2<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>linknode<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>Circle<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
			TreeSeq<span style="color: #008000;">&#40;</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//计算以每个圈上顶点为根的内向树括号序列</span>
	<span style="color: #0000ff;">return</span> arrange_dfs<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> clear<span style="color: #008000;">&#40;</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><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>S2<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		Circle<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<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>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pch.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;pch.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>D<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>D<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>solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Tn&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Nn&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		clear<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//清理 释放内存</span>
	<span style="color: #008000;">&#125;</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>Byteland一直以奇妙的跳舞蝇而闻名于世。驯养的苍蝇能和着音乐的节奏精确地做每一次飞跃。通常，训练者会在桌上放一排硬币，这些硬币的排列 并不按照特定的顺序。每枚硬币上都有一行题字：i→j，i是这枚硬币的编号，j是站在硬币i上的苍蝇下一步应该飞往的硬币编号。训练者在每个硬币上放一只 苍蝇，然后开始放音乐。那些苍蝇就跟着音乐的节拍开始跳舞，在每一拍中苍蝇都会直接跳到编号为j的硬币上。在舞蹈中，可能会出现多只苍蝇在同一硬币上的情 况。这样，跳舞蝇就会一起继续表演。假定有n只苍蝇，n枚硬币。则一旦确定了n枚硬币上的题字，那么这场表演也就确定了。然而，对硬币不同的设置也可能导 致相同的表演，只要我们把硬币按适当的顺序排列。 让我们先来看3枚硬币上的表演。如果表演是这样进行：从第一个硬币到第二个，第二个到第三个，第三个又回到第一个硬币（表示为1→2，2→3，3→1）。 具体表演是3只苍蝇绕圈跳跃，从不相遇。那么表演1→2，2→3，3→3，则是与其不同的。因为该表演为：两拍后，所有的苍蝇在第3枚硬币上相遇，然后一 直在原地跳跃。</p>
<p>但是，设置1→2，2→3，3→2，4→4和1→1、2→3、3→2、4→3就是同样的类型。如果你把前者的硬币从左到右排列，而把后者从右到左排列，就会看到相同的表演。</p>
<p>任务：</p>
<p>如果跳舞蝇的两次表演是相同的，就会使观众不满，请编写一个程序：</p>
<ul>
<li>从文件中读入测试任务的个数；</li>
<li>对每一个测试任务，从PCH.IN中读入两组硬币设置，验证是否能把硬币按一定顺序排列，使跳舞蝇给出相同的表演；</li>
<li>把结果写入文件。</li>
</ul>
<p>输入：</p>
<p>文件的第一行是测试任务的个数d(1≤d≤100)，以下3*d行，每三行描述一个任务。三行中的第一行是一个整数 n(1≤n≤2000)，表示硬币的个数。后两行每行均为一套硬币的描述。格式为n个用空格分开的1…n范围内的整数，第i个整数表示硬币i上的苍蝇应该 飞向的硬币的编号。</p>
<p>输出：</p>
<p>对每个任务，均要在文件中输出一行，仅包含一个字母。如果可以按一定顺序排硬币使表演相同则输出“T”，否则输出“N”。</p>
<p>输入样例：</p>
<pre>2
3
2 3 1
2 3 3
4
2 3 2 4
1 3 2 3</pre>
<p>输出样例：</p>
<pre>N
T</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/directed-tree-bracket-sequence/" title="有向树与树的括号序列最小表示法">有向树与树的括号序列最小表示法</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-kop/" title="POI 2001 Glodmine 金矿">POI 2001 Glodmine 金矿</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pod/" title="POI 2001 Travel 旅行">POI 2001 Travel 旅行</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-mro/" title="POI 2001 Ants and the ladybug 蚂蚁和瓢虫">POI 2001 Ants and the ladybug 蚂蚁和瓢虫</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-ant/" title="POI 2001 Antiprime Numbers 反质数">POI 2001 Antiprime Numbers 反质数</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-2001-pch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POI 2001 Travel 旅行</title>
		<link>http://www.byvoid.com/blog/poi-2001-pod/</link>
		<comments>http://www.byvoid.com/blog/poi-2001-pod/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 13:26:39 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[动态]]></category>
		<category><![CDATA[最短路径]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=832</guid>
		<description><![CDATA[题目很长，题意简述可为给定一个动态图(边权随已知最短路径周期变化)，求从X到Y的最短路径。我们只需把换乘车等待的时间看作动态的边长度。 按照路径构造有向图，构图后用一般的最短路... ]]></description>
			<content:encoded><![CDATA[<p>题目很长，题意简述可为给定一个动态图(边权随已知最短路径周期变化)，求从X到Y的最短路径。我们只需把换乘车等待的时间看作动态的边长度。</p>
<p>按照路径构造有向图，构图后用一般的最短路径算法(Dijkstra,SPFA)即可解决，关键在松弛边时计算动态的边权。对于每条有向 边，需要记录其长度len，所属的线路b，从线路起点到该边的起始端的距离前缀长度pre。在松弛时，已知当前最短路为S，该边前缀pre，该边所属线路 的周期C，边长len。则我们所需等车的最短时间T，如果(A-pre)能整除C，T=A-pre；如果(A-pre)不能整除C，T=((A- pre)/C+1)*C (/为整除)。动态的边权E=len+T，用动态E松弛即可。</p>
<p><span id="more-832"></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('p832code6'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8326"><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
</pre></td><td class="code" id="p832code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI2001 pod
 * Author: Guo Jiabao
 * Time: 2009.2.3 20:50
 * State: Solved
*/</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>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span>,MAXK<span style="color: #000080;">=</span><span style="color: #0000dd;">2001</span>,MAXE<span style="color: #000080;">=</span><span style="color: #0000dd;">8001</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> edge<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> t,len,belong,pre<span style="color: #008080;">;</span>edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> adjl<span style="color: #008000;">&#123;</span>edge <span style="color: #000040;">*</span>f,<span style="color: #000040;">*</span>l<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> queue<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> Q<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,size,head,tail<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,K,X,Y,G,M,Ec<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> C<span style="color: #008000;">&#91;</span>MAXK<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
adjl Ad<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
edge E<span style="color: #008000;">&#91;</span>MAXE<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
queue Q<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> inq<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Q_ins<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	inq<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">size</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Q.<span style="color: #007788;">head</span><span style="color: #000080;">&gt;=</span>MAXN<span style="color: #008000;">&#41;</span>	Q.<span style="color: #007788;">head</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">Q</span><span style="color: #008000;">&#91;</span>Q.<span style="color: #007788;">head</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> Q_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> rv<span style="color: #000080;">=</span>Q.<span style="color: #007788;">Q</span><span style="color: #008000;">&#91;</span>Q.<span style="color: #007788;">tail</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	inq<span style="color: #008000;">&#91;</span>rv<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">size</span><span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Q.<span style="color: #007788;">tail</span><span style="color: #000080;">&gt;=</span>MAXN<span style="color: #008000;">&#41;</span>	Q.<span style="color: #007788;">tail</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> rv<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<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> len,<span style="color: #0000ff;">int</span> belong,<span style="color: #0000ff;">int</span> pre<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ad<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #008000;">&#41;</span>
		Ad<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span>Ad<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>E<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Ec<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		Ad<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #000080;">=</span>Ad<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>E<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Ec<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	E<span style="color: #008000;">&#91;</span>Ec<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
	E<span style="color: #008000;">&#91;</span>Ec<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #000080;">=</span>len<span style="color: #008080;">;</span>
	E<span style="color: #008000;">&#91;</span>Ec<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">belong</span><span style="color: #000080;">=</span>belong<span style="color: #008080;">;</span>
	E<span style="color: #008000;">&#91;</span>Ec<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">pre</span><span style="color: #000080;">=</span>pre<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> L,i,j,Path<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Route<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,S<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pod.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;pod.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%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>K,<span style="color: #000040;">&amp;</span>X,<span style="color: #000040;">&amp;</span>Y,<span style="color: #000040;">&amp;</span>G,<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>K<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&quot;</span>,<span style="color: #000040;">&amp;</span>L,<span style="color: #000040;">&amp;</span>C<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>L<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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>Path<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>L<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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>Route<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>S<span style="color: #000080;">=</span><span style="color: #0000dd;">0</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>L<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			addedge<span style="color: #008000;">&#40;</span>Path<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>,Path<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,Route<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>,i,S<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			S<span style="color: #000040;">+</span><span style="color: #000080;">=</span>Route<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>S<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,j<span style="color: #000080;">=</span>L<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			addedge<span style="color: #008000;">&#40;</span>Path<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,Path<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>,Route<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>,i,S<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			S<span style="color: #000040;">+</span><span style="color: #000080;">=</span>Route<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: #008000;">&#125;</span>
	Q.<span style="color: #007788;">head</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>
&nbsp;
<span style="color: #0000ff;">void</span> spfa<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,sp<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,u,v,e,pre,c<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>X<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">960000</span><span style="color: #000040;">+</span>M<span style="color: #008080;">;</span>
	Q_ins<span style="color: #008000;">&#40;</span>X<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		u<span style="color: #000080;">=</span>Q_pop<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>k<span style="color: #000080;">=</span>Ad<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			v<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>pre<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>pre<span style="color: #008080;">;</span>c<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>belong<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			e<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>pre<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>c<span style="color: #000040;">*</span>c<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>pre<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>c<span style="color: #008000;">&#41;</span>
				e<span style="color: #000040;">+</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
			e<span style="color: #000040;">+</span><span style="color: #000080;">=</span>pre<span style="color: #000040;">-</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>len<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>e<span style="color: #000080;">&lt;</span>sp<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				sp<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>e<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>inq<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					Q_ins<span style="color: #008000;">&#40;</span>v<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>
	Ans<span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>Y<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">960000</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> H<span style="color: #000080;">=</span>G,M<span style="color: #008080;">;</span>
	H<span style="color: #000040;">+</span><span style="color: #000080;">=</span>Ans <span style="color: #000040;">/</span> <span style="color: #0000dd;">60</span><span style="color: #008080;">;</span>
	M<span style="color: #000080;">=</span>Ans <span style="color: #000040;">%</span> <span style="color: #0000dd;">60</span><span style="color: #008080;">;</span>
	H<span style="color: #000040;">%</span><span style="color: #000080;">=</span><span style="color: #0000dd;">24</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&quot;</span>,H,M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	spfa<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	print<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>让我们先确定某个城市的交通网络图，图中的点（编号为1..n），表示车站；边(pi,pj) (其中pi≠pj)，表示有一条路线直接连接车站pi和pj(1≤pi, pj≤n)。城市中的公共汽车线路从1到k编号。在线路l上有车站pl,1, pl,2,&#8230;,pl,sl,，用rl,1, rl,2,&#8230;,rl,sl-1表示对应相邻两车站间的行驶时间。例如rl,1 是从车站pl,1 到pl,2所需的时间，rl,2是从车站pl,2到pl,3所需的时间。同一线路上的车站互不相同(即若i≠j则pl,i≠pl,j)。在线路l上，发车 时间有固定的周期，表示为cl， 其中cl 属于集合{6, 10, 12, 15, 20, 30, 60}；而且在每个整点g:0 (0≤g≤23)，从车站pl,1 必有一辆车出发。于是可知在g:cl,、g:2cl,&#8230; 时(g:cl 表示g小时后的cl分钟)，都有车出发。所有的路线均为双向：从车站pl,1到pl,sl ，从车站pl,sl 到 pl,1，且同时以车。在这样的一个城市中，我们打算做一次从车站x到车站y的旅行。你可以假定该旅行是能够完成的，而且所需的时间不超过24小时。旅行 中在任一车站我们都可以换车，上下车的时间不计，但等车的时间要计算在内。我们的目的是尽可能快地完成从车站x到车站y的旅行。</p>
<p>下图是一个有6个车站的交通网，有两条公共汽车线路。线路1：经过车站1、3、4、6；线路2：经过车站2、4、3、5。发车的周期是：c1=15，c2=20。相邻车站间行驶时间己标在图中的边上，以下标1、2表示不同的线路。</p>
<p><a class="image" title="Image:Pod.gif" href="http://www.ruvtex.cn/wiki/Image:Pod.gif"><img longdesc="/wiki/Image:Pod.gif" src="http://www.ruvtex.cn/mw/images/0/0f/Pod.gif" alt="Image:Pod.gif" width="383" height="182" /></a></p>
<p>假定在23:30我们在车站5，目标是到车站6。则必须等10分钟(在23:40)才有一班2路车从车站5出发。接下来有两种旅行方案，其 一：在23:51到达车站3，等3分钟，改乘1路车到达车站6(0:16)。其二：继续乘2路车到车站4(0:8)，再等13分钟(0:21)乘1路车到 车站6(0:31)。因此到达车站6时最早的时间是0:16。</p>
<p>任务：</p>
<ul>
<li>从文件中读入对交通网的描述，交通路线，起始车站x，终点车站y，旅行开始的时间gx和mx(gx表示小时，mx表示分钟)；</li>
<li>找出从x到y的最早到达时间；</li>
<li>把到车站y的最早时间gy：my写入文件。</li>
</ul>
<p>输入：</p>
<p>文件的第一行是6个用空格分开的整数：</p>
<ul>
<li>车站总数n（1≤n≤1000）；</li>
<li>路线数目k（1≤k≤2000）；</li>
<li>起点车站x（1≤x≤n）；</li>
<li>终点车站y（1≤y≤n）；</li>
<li>旅行开始时刻中的小时gx（0≤gx≤23）；</li>
<li>旅行开始时间中的分钟mx（0≤mx≤59）。</li>
</ul>
<p>车站从1至n编号，路线从1至k编号。接下来的3k行用来描述路线，每条路线的描述占3行：</p>
<ul>
<li>描述路线l的第一行是两个用一空格分开的整数：sl和cl，分别表示路线经过的车站数目和发车周期，其中2≤sl≤n，cl属于集合｛6,10,15,20,30,60｝。</li>
<li>描述路线l的第二行有sl个不同的整数，以一个空格分开：pl,1,pl,2,&#8230;,pl,sl，表示路线l经过车站的编号( 当1≤i≤sl时，1≤pl,i≤n)。</li>
<li>描述路线l的第三行有sl-1个用空格分开的整数：rl,1, rl,2,&#8230;, rl,sl-1，表示路线l上相邻两车站间的行驶时间，以分钟作为单位( 当1≤i≤sl-1时，1≤rl,i≤240)。</li>
</ul>
<p>所有路线的车站数目之和不超过4000（即s1+s2+&#8230;+sk≤4000）。</p>
<p>输出：</p>
<p>文件中仅有两个用一空格分开的整数，即最早到达终点的时间：gy和my，（0≤gy≤23，0≤my≤59）。</p>
<p>输入样例：</p>
<pre>6 2 5 6 23 30
4 15
1 3 4 6
9 12 10
4 20
5 3 4 2
11 17 11</pre>
<p>输出样例：</p>
<pre>0 16</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-2001-kop/" title="POI 2001 Glodmine 金矿">POI 2001 Glodmine 金矿</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pch/" title="POI 2001 Wandering flea trainers 跳舞蝇的教练">POI 2001 Wandering flea trainers 跳舞蝇的教练</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-mro/" title="POI 2001 Ants and the ladybug 蚂蚁和瓢虫">POI 2001 Ants and the ladybug 蚂蚁和瓢虫</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-ant/" title="POI 2001 Antiprime Numbers 反质数">POI 2001 Antiprime Numbers 反质数</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-prz/" title="POI 2001 Intervals 区间">POI 2001 Intervals 区间</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-2001-pod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POI 2001 Ants and the ladybug 蚂蚁和瓢虫</title>
		<link>http://www.byvoid.com/blog/poi-2001-mro/</link>
		<comments>http://www.byvoid.com/blog/poi-2001-mro/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 04:57:58 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[BFS]]></category>
		<category><![CDATA[树]]></category>
		<category><![CDATA[瓢虫]]></category>
		<category><![CDATA[蚂蚁]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=829</guid>
		<description><![CDATA[做出这道题关键在于读懂题目，尤其是第3条和第4条规则。可以知道，所有蚂蚁是一拥而上的，而且蚂蚁很聪明，它们知道如果在某时一只蚂蚁到瓢虫的路 径与另一只蚂蚁的路径相互包含，就... ]]></description>
			<content:encoded><![CDATA[<p>做出这道题关键在于读懂题目，尤其是第3条和第4条规则。可以知道，所有蚂蚁是一拥而上的，而且蚂蚁很聪明，它们知道如果在某时一只蚂蚁到瓢虫的路 径与另一只蚂蚁的路径相互包含，就让距离近的蚂蚁继续行进，另一只蚂蚁停留不动。蚂蚁们还会互相礼让，如果要同时进入一个节点，就让编号小的蚂蚁进入，其 它蚂蚁停止不再动。</p>
<p>瓢虫会停留在多个位置，但是都是互相不关联的，我们可以把瓢虫停留的每个位置看作独立的测试点，每个测试点要用到上个测试点的结果，所以我们可以分割考虑每次瓢虫停留。</p>
<p>对于每次瓢虫停留，如果简单地模拟，会很容易超时。我们要把每只蚂蚁一次移动到位。首先从瓢虫的位置开始一遍BFS，找到所有可行进的蚂 蚁，记录每只蚂蚁到瓢虫位置的路径。然后按照路径长度从小到大为第一关键字，蚂蚁编号从小到大为第二关键字把蚂蚁进行排序，排名第一的蚂蚁一定是可以驱逐 瓢虫的蚂蚁，把它的路径上的顶点分别标记时间。然后依次处理每只蚂蚁，如果某只蚂蚁路径上有节点已经被标记时间，则这只蚂蚁的最大移动时间就是已经标记的 时间。在移动时也标记时间，用于影响后面的蚂蚁。这样，移动所有蚂蚁的时间复杂度是O(N+K)的。</p>
<p>算法的总的时间复杂度为O((N+K*logK)*L)，可以很快解决问题。实际编写时有很多细节需要注意。<br />
<span id="more-829"></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('p829code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8298"><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
</pre></td><td class="code" id="p829code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI2001 mro
 * Author: Guo Jiabao
 * Time: 2009.2.2 21:43
 * State: Solved 
*/</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>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">5001</span>,MAXK<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> edge<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> t<span style="color: #008080;">;</span>edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> adjl<span style="color: #008000;">&#123;</span>edge <span style="color: #000040;">*</span>f,<span style="color: #000040;">*</span>l<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> vertex<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> id,ant,label<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> ant<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> vtx,id,dist,hits<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> path<span style="color: #008000;">&#123;</span>path <span style="color: #000040;">*</span>from<span style="color: #008080;">;</span><span style="color: #0000ff;">int</span> p<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
edge E<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
adjl A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
vertex V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
ant Ant<span style="color: #008000;">&#91;</span>MAXK<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> PL<span style="color: #008000;">&#91;</span>MAXK<span style="color: #008000;">&#93;</span>,Pt<span style="color: #008000;">&#91;</span>MAXK<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;">int</span> N,K,L,Ec<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,Target<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Order<span style="color: #008000;">&#91;</span>MAXK<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008000;">&#41;</span>
		A<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>E<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Ec<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		A<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>E<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Ec<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	E<span style="color: #008000;">&#91;</span>Ec<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,a,b<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mro.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;mro.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&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</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>
		addedge<span style="color: #008000;">&#40;</span>b,a<span style="color: #008000;">&#41;</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>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #000080;">=</span>i<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>K<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>K<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>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vtx</span><span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
		Order<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<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&quot;</span>,<span style="color: #000040;">&amp;</span>L<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<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>
	path Queue<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,u,v<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> Head<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,Tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</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> <span style="color: #000040;">*</span>P<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>
	Queue<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #000080;">=</span>Target<span style="color: #008080;">;</span>
	Queue<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">from</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	vis<span style="color: #008000;">&#91;</span>Target<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;">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>
		v.<span style="color: #007788;">from</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>Queue<span style="color: #008000;">&#91;</span>Head<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		u<span style="color: #000080;">=</span>Queue<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>k<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>u.<span style="color: #007788;">p</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			v.<span style="color: #007788;">p</span><span style="color: #000080;">=</span>k<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><span style="color: #000040;">!</span>vis<span style="color: #008000;">&#91;</span>v.<span style="color: #007788;">p</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				vis<span style="color: #008000;">&#91;</span>v.<span style="color: #007788;">p</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>v.<span style="color: #007788;">p</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					<span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>v.<span style="color: #007788;">p</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</span><span style="color: #008080;">;</span>
					path <span style="color: #000040;">*</span>b<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>v<span style="color: #008080;">;</span>
					PL<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
					P<span style="color: #000080;">=</span>Pt<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>from<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						P<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>PL<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>p<span style="color: #008080;">;</span>
						b<span style="color: #000080;">=</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>from<span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
					P<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>PL<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Target<span style="color: #008080;">;</span>
					Ant<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span><span style="color: #000080;">=</span>PL<span style="color: #008000;">&#91;</span>a<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: #008000;">&#125;</span>
				<span style="color: #0000ff;">else</span>
					Queue<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Tail<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Move<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> p,i,j,u,v,MaxStep,Step<span style="color: #008080;">;</span>
	i<span style="color: #000080;">=</span>Order<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">hits</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	MaxStep<span style="color: #000080;">=</span>PL<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>p<span style="color: #000080;">&lt;=</span>K <span style="color: #000040;">&amp;&amp;</span> Ant<span style="color: #008000;">&#91;</span>i<span style="color: #000080;">=</span>Order<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span><span style="color: #000080;">&lt;</span>INF<span style="color: #008080;">;</span>p<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Step<span style="color: #000080;">=</span>MaxStep<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>PL<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			u<span style="color: #000080;">=</span>Pt<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Step<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		u<span style="color: #000080;">=</span>Pt<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>
		V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</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>j<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>Step<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			v<span style="color: #000080;">=</span>Pt<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&gt;</span> V<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #008000;">&#41;</span>
				V<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			u<span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vtx</span><span style="color: #000080;">=</span>u<span style="color: #008080;">;</span>
		V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp<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>
	<span style="color: #0000ff;">int</span> A<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a,B<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> Ant<span style="color: #008000;">&#91;</span>A<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span> <span style="color: #000080;">&lt;</span> Ant<span style="color: #008000;">&#91;</span>B<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span> <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</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> Ant<span style="color: #008000;">&#91;</span>A<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span> <span style="color: #000080;">&gt;</span> Ant<span style="color: #008000;">&#91;</span>B<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span> <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> Ant<span style="color: #008000;">&#91;</span>A<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span>   <span style="color: #000080;">&lt;</span> Ant<span style="color: #008000;">&#91;</span>B<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span>   <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> clear<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>
	<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>K<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">dist</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><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>
		V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">label</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,a<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>L<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>Target<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>Target<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			a<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>Target<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ant</span><span style="color: #008080;">;</span>
			Ant<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">hits</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			clear<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>
			<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>Order<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,K,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Order<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			Move<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #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>K<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;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d %dn&quot;</span>,Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vtx</span>,Ant<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">hits</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">蚂蚁和瓢虫 </span></h2>
<p>蚂蚁和蚜虫是共生的。蚜虫分泌出蜜汁给蚂蚁引用。蚂蚁帮助蚜虫赶走它的天敌——瓢虫。在蚂蚁山附近有一个树，这里是蚜虫生活的地方。蚜虫吸取树的汁 液。有n个蚂蚁兵，用1到n编号。一个瓢虫威胁着这个文明，它经常出现在蚜虫活动的地方。当瓢虫坐在树上时，蚂蚁兵会出动把它赶走。他们按照如下的规则：</p>
<p>树上的任意两点之间都只有一条路径,所有的蚂蚁都沿着它所在点到瓢虫的路径前进，每移动一个位置，花的时间是单位1。</p>
<ul>
<li>如果蚂蚁和瓢虫在同一个位置，那么蚂蚁立即把它赶走。</li>
<li>如果某个蚂蚁的路径上有另外一只蚂蚁，那么距离目标较远的蚂蚁待在原地不动，较近的那个蚂蚁继续前进。</li>
<li>如果有多个蚂蚁要进入同一个位置，那么选择编号最小的蚂蚁，其余的蚂蚁留在原位置不动。</li>
<li>当蚂蚁到达了瓢虫的位置以后，把它赶走，然后停留在该位置。</li>
</ul>
<p>瓢虫是非常顽固的动物，它被赶走了以后还会再停留到别的位置。然后蚂蚁继续行动。为了使问题简单化，我们假定从一个位置到达与它相邻的位置花1个单位的时间。</p>
<p>任务：</p>
<p>读入树的描述，蚂蚁的开始位置，以及瓢虫停留地点。 给出每个蚂蚁的最后的位置，以及该蚂蚁赶走瓢虫的次数。</p>
<p>输入：</p>
<p>文件的第一行，一个整数n，1&lt;=n&lt;=5000。表示地点的编号。接下来n-1行描述了树里的边，每行两个整数a和b，表示 这两点之间相连。然后一行是整数k，1&lt;=k&lt;=1000 and k&lt;=n。是蚂蚁兵的数目。接下来k行，每行一个整数，表示蚂蚁兵开始的位置。没有两个蚂蚁位于一个位置。然后是一个整数l, 1&lt;=l&lt;=500,即瓢虫停留l次。下面的l行每行一个整数，表示瓢虫依次停留的位置。</p>
<p>输出：</p>
<p>k行。每行两个整数，分别表示第k个蚂蚁最后的位置以及它赶走瓢虫的次数。</p>
<p>Sample Input</p>
<pre>4
1 2
1 3
2 4
2
1
2
2
2
4</pre>
<p>Sample Output</p>
<pre>1 0
4 2</pre>
<p>Figure</p>
<pre><a class="image" title="Image:Mro.gif" href="http://www.ruvtex.cn/wiki/Image:Mro.gif"><img longdesc="/wiki/Image:Mro.gif" src="http://www.ruvtex.cn/mw/images/4/49/Mro.gif" alt="Image:Mro.gif" width="136" height="80" /></a></pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-2001-kop/" title="POI 2001 Glodmine 金矿">POI 2001 Glodmine 金矿</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pch/" title="POI 2001 Wandering flea trainers 跳舞蝇的教练">POI 2001 Wandering flea trainers 跳舞蝇的教练</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pod/" title="POI 2001 Travel 旅行">POI 2001 Travel 旅行</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-ant/" title="POI 2001 Antiprime Numbers 反质数">POI 2001 Antiprime Numbers 反质数</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-prz/" title="POI 2001 Intervals 区间">POI 2001 Intervals 区间</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-2001-mro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
