<?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; NOI</title>
	<atom:link href="http://www.byvoid.com/blog/cate/slns/noi-slns/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>WC2010 排序机</title>
		<link>http://www.byvoid.com/blog/wc2010-sort/</link>
		<comments>http://www.byvoid.com/blog/wc2010-sort/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 05:40:37 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[WC]]></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=1827</guid>
		<description><![CDATA[问题简述 给定一个初始的排列P和M个轮换，每个轮换可以将排列P中的每个数值轮换为排列中的另一个数值，轮换后仍然是一个排列。求出从排列P到排列1,2,3,…,N至少要经过多少次轮换，输出一... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc256326565">问题简述</a></h3>
<p>给定一个初始的排列P和M个轮换，每个轮换可以将排列P中的每个数值轮换为排列中的另一个数值，轮换后仍然是一个排列。求出从排列P到排列1,2,3,…,N至少要经过多少次轮换，输出一个方案。</p>
<h3><a name="_Toc256326566"></a><a name="_Toc241035976">问题</a><a name="_Toc241035977"></a>分析</h3>
<p>本题非常困难，好在是个提交答案题，可以看数据，然后针对每个数据设计合适的算法。不过在看数据之前，首先还是稍作一些转换，以便简化思维复杂度。本题中的“轮换”用了一种很别扭的转换方式（转换数值），与以往的习惯格格不入（轮换位置），因此要把它转化一下。用一个哈希表记录每个数值的位置，形成新的排列Ti就表示原序列中数i在第Ti位，例如样例中的4 3 1 2，转化后就是3 4 1 2，在转化后的序列上变换只用变换位置即可，这样就符合我们的习惯了（至少是我的习惯）。</p>
<p>接下来可以观察数据了。首先发现测试点1、2、3的N、M都很小，可以直接搜索求解。用迭代加深或者广搜即可拿到满分。</p>
<p>观察测试点4，N、M很大，没办法搜索了。但是发现所有轮换都是交换相邻两个元素，而且M=N-1，恰好囊括了N个元素所有相邻两对。这让我联想到冒泡排序的方法，由于冒泡排序每次交换的都是相邻两个元素，因此可以用来解决这个测试点。</p>
<p>测试点5的输入文件是最大的一个，主要是由于M相当大，而且一时没发现什么规律。不过突然发现M=N*(N-1)/2，令我联想到完全图顶点和边数的公式——是不是任意两个都可以交换呢？写程序判重以后发现果然是无重复的M个轮换，这意味着任意两个位置可以交换。因此我们可以从1到N逐个确定每个位置上的值。<br />
<span id="more-1827"></span><br />
测试点6、7的共同特点是M=N-1，且每个轮换都是1和其他元素交换位置。判重后发现1和任意一个元素都能交换位置，对此我设计了一个贪心算法：每次把1上面的值换到目标位置上去，如果某时1恰好对应了1且还有元素没有交换完成，则把下一个需要交换的元素与1交换，这种方法是的交换次数O(N)的。</p>
<p>测试点8、9、10都很大，但是明显的共同特征是M=N-1，一个不太明显的特征是所有轮换都是交换第i和i/2个元素。这个“不太明显的特征”恰恰是解决本题的关键，因为如果抽象成图，这是一棵<strong>完全二叉树</strong>。可以看出每个位置上的值到目标位置只有唯一的路径，这个路径正是两个点到最近公共祖先的路径。于是方法就出来了，从第1个位置开始，找到i与T<sub>i</sub>的最近公共祖先，经过这个路径交换过去。</p>
<p>到此为止已经解决了所有的测试点，回过头来看看，发现除了前三个测试点以外，其余所有的测试点中的轮换都是两个元素的交换，如果看做图论中一条边的话，测试点描述了一个图。再想想这个题为什么叫“排序机”？因为每个测试的对应了一种排序方法。如下表所示：</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><strong>测试点</strong><strong> </strong></td>
<td valign="top"><strong>图论结构</strong><strong> </strong></td>
<td valign="top"><strong>排序方法</strong><strong></strong></td>
</tr>
<tr>
<td valign="top"><strong>4</strong></td>
<td valign="top">链</td>
<td valign="top">冒泡排序</td>
</tr>
<tr>
<td valign="top"><strong>5</strong></td>
<td valign="top">完全图</td>
<td valign="top">选择排序</td>
</tr>
<tr>
<td valign="top"><strong>6,7</strong></td>
<td valign="top">蜘蛛型树<a name="_ftnref1_7898" href="#_ftn1_7898">[1]</a></td>
<td valign="top">选择排序</td>
</tr>
<tr>
<td valign="top"><strong>8,9,10</strong></td>
<td valign="top">完全二叉树</td>
<td valign="top">堆排序</td>
</tr>
</tbody>
</table>
<p>至于这个题的一般方法，暂时还没有好想法，仍需继续研究、探讨。</p>
<hr size="1" />
<p><a name="_ftn1_7898" href="#_ftnref1_7898">[1]</a>以一个点为中心，其他所有点都是该点的子节点的树。</p>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc-2010-solution/" title="NOI 2010 冬令营 解题报告">NOI 2010 冬令营 解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2010-rebuild/" title="WC2010 重建计划">WC2010 重建计划</a></li><li><a href="http://www.byvoid.com/blog/wc2010-efield/" title="WC2010 能量场">WC2010 能量场</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-solutions/" title="NOI解题报告">NOI解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2009-start/" title="出发-NOI2009冬令营">出发-NOI2009冬令营</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/wc2010-sort/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WC2010 重建计划</title>
		<link>http://www.byvoid.com/blog/wc2010-rebuild/</link>
		<comments>http://www.byvoid.com/blog/wc2010-rebuild/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 01:24:36 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[WC]]></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=1819</guid>
		<description><![CDATA[问题简述 给定一棵边上带权的树，求一个平均价值最大的简单路径。路径的平均价值定义为路径的带权长度与不带权长度的比值。 问题分析 在一棵树上直接找这样的路径是很困难的，因此我... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc256326565">问题简述</a></h3>
<p>给定一棵边上带权的树，求一个平均价值最大的简单路径。路径的平均价值定义为路径的带权长度与不带权长度的比值。</p>
<h3><a name="_Toc256326566"></a><a name="_Toc241035976">问题</a><a name="_Toc241035977"></a>分析</h3>
<p>在一棵树上直接找这样的路径是很困难的，因此我们考虑将问题分解。一个基本的想法是在树上分治，为保证对数级别的时间复杂度，必须使用基于点的剖分<a name="_ftnref1_9307" href="#_ftn1_9307">[1]</a>。每次找到树的重心<a name="_ftnref2_9307" href="#_ftn2_9307">[2]</a>作为根节点，然后将根节点的子树平均分为两部分，两部分共用根节点。对每一部递归求解，然后把这两部分合并。求树的重心的方法是随便找一个根，求出每个子树的大小，找到max{i.child.size,N-i.size}最小的i，i就是树的重心。重心可能有多个，找一个即可。</p>
<p>对于一个分治的局面，每一部分都是当前根节点的一些子树组成的森林，再加上根节点，所以每一部分仍然是一棵树。最优的路径可能在某一个分治的部分中，也可能跨过根节点在两个部分中。前者可以直接递归下去求解，重点是处理后者的情况。这时需要做的一个重要转化是二分答案，由于答案的范围是已知的，我们可以在答案的范围内二分答案的值A，然后把树上每一条边的权值都减去A。判断有解的方法也就变成了判断是否存在一条带权长度大于等于0的路径，继续转化就是，<strong>判断最长的带权路径的带权长度是否大于等于</strong><strong>0</strong>。<br />
<span id="more-1819"></span><br />
如何找出跨两部分的最长带权路径呢？由于路径的长度必须满足在[L,U]之间，简单的想法是在一个部分中枚举路径的一个端点的深度i，那么这条路径的另一端在另一个部分中的深度一定是在[L-i,U-i]之间。为保证路径最长，第一个部分中深度为i的一段显然应该是这个部分中深度为i的所有路径中带权长度最大的那一条，第二部分也同理，不过要枚举深度在[L-i,U-i]的最大值。如果我们确定i的枚举顺序以后，[L-i,U-i]区间的移动就是单调的，因此可以用单调队列维护最大值，因此时间复杂度就是线性的。</p>
<h3><a name="_Toc256326567">算法描述</a></h3>
<p>1. 求出当前树的重心，对当前树进行点剖分。</p>
<p>2. 二分当前树中平均长度最大值A，判断二分范围是否满足精度，如果满足转到步骤5，否则转到步骤3。</p>
<p>3. 将树上所有边权值减去A，求出剖分的两部分每个深度上的最长带权路径长度。</p>
<p>4. 用单调队列维护，求出跨两部分的带权路径长度最大值，判断该值是否大于等于0，转到步骤2。</p>
<p>5. 对剖分的两部分分别递归求解，如果这一部分大小大于等于L的话。</p>
<h3><a name="_Toc256326568"></a><a name="_Toc241035980">复杂度分析</a></h3>
<p>对树点剖分的时间复杂度为O(logN)，求重心的时间复杂度为O(N)，二分答案时间复杂度为O(logV)，求带权路径长度最大值时间复杂度为O(N)，因此总时间复杂度为O(NlogNlogV)。</p>
<h3><a name="_Toc256326569"></a><a name="_Toc241035981">参考程序</a></h3>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1819code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p18192"><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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
</pre></td><td class="code" id="p1819code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI Winter Camp 2010 Rebuild
 * Author: Guo Jiabao
 * Time: 2010.3.12 14:01
 * Label: Solved
 * Memo: Binary Search + Monoqueue + Devide &amp; Conquer on tree
*/</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;sstream&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;list&gt;</span>
<span style="color: #339900;">#include &lt;deque&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #339900;">#include &lt;queue&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #339900;">#define var(a,b) typeof(b) a(b)</span>
<span style="color: #339900;">#define foreach(a,b) for (var(a,b.begin());a!=b.end();++a)</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN <span style="color: #000080;">=</span> <span style="color: #0000dd;">100001</span>,MAXM<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span>,INF<span style="color: #000080;">=</span>~0U<span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> LIM<span style="color: #000080;">=</span><span style="color:#800080;">1e6</span>,FINF <span style="color: #000080;">=</span> <span style="color:#800080;">1e20</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> Monoqueue
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">struct</span> element
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> key<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">double</span> value<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>Q<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> head,rear<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">void</span> reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		rear <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		head <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k,<span style="color: #0000ff;">double</span> v<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>rear <span style="color: #000080;">&gt;=</span> head <span style="color: #000040;">&amp;&amp;</span> v <span style="color: #000080;">&gt;</span> Q<span style="color: #008000;">&#91;</span>rear<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">value</span><span style="color: #008000;">&#41;</span>
			rear<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		Q<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>rear<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">value</span> <span style="color: #000080;">=</span> v<span style="color: #008080;">;</span>
		Q<span style="color: #008000;">&#91;</span>rear<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">key</span> <span style="color: #000080;">=</span> k<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> getmax<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> L<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q<span style="color: #008000;">&#91;</span>head<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">key</span> <span style="color: #000080;">&lt;</span> L<span style="color: #008000;">&#41;</span>
			head<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> Q<span style="color: #008000;">&#91;</span>head<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">key</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>MQ<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> edge
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> t,c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,L,U,EC,timestamp,Total<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> t_ctd,t_ctd_csm,md1,md2,<span style="color: #000040;">*</span>t_maxdpt<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> size<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,depth<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> length<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,d1m<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,d2m<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>t_dm<span style="color: #008080;">;</span>
edge <span style="color: #000040;">*</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,ES<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> ava<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> Ans,t_delta<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: #0000ff;">int</span> c<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>ES<span style="color: #000040;">+</span> <span style="color: #000040;">++</span>EC<span style="color: #008080;">;</span>
	e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t <span style="color: #000080;">=</span> b<span style="color: #008080;">;</span>
	e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000080;">=</span> c<span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> e<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;rebuild.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;rebuild.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>L,<span style="color: #000040;">&amp;</span>U<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: #008000;">&#123;</span>
    	<span style="color: #0000ff;">int</span> a,b,c<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>a,<span style="color: #000040;">&amp;</span>b,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    	addedge<span style="color: #008000;">&#40;</span>a,b,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    	addedge<span style="color: #008000;">&#40;</span>b,a,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>L <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> c <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
			Ans <span style="color: #000080;">=</span> c<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> get_depth<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			depth<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			get_depth<span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> get_longest_line<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> start<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,maxdepth<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>depth,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>depth<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	depth<span style="color: #008000;">&#91;</span>start<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> maxdepth <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	get_depth<span style="color: #008000;">&#40;</span>start<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> maxdepth<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			maxdepth <span style="color: #000080;">=</span> depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			start <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>depth,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>depth<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	depth<span style="color: #008000;">&#91;</span>start<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> maxdepth <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	get_depth<span style="color: #008000;">&#40;</span>start<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> maxdepth<span style="color: #008000;">&#41;</span>
			maxdepth <span style="color: #000080;">=</span> depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> maxdepth<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> get_size<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> csm <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	size<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>size<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			get_size<span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			size<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> size<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>size<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> csm<span style="color: #008000;">&#41;</span>
				csm <span style="color: #000080;">=</span> size<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>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Total <span style="color: #000040;">-</span> size<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> csm<span style="color: #008000;">&#41;</span>
		csm <span style="color: #000080;">=</span> Total <span style="color: #000040;">-</span> size<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>csm <span style="color: #000080;">&lt;</span> t_ctd_csm<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		t_ctd_csm <span style="color: #000080;">=</span> csm<span style="color: #008080;">;</span>
		t_ctd <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;">int</span> get_centroid<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>size,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>size<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	t_ctd_csm <span style="color: #000080;">=</span> INF<span style="color: #008080;">;</span>
	get_size<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>size,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>size<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> t_ctd<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> count_size<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	size<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>size<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			count_size<span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			size<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> size<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>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> count_depth_max_length<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">//求最大深度</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> <span style="color: #000040;">*</span>t_maxdpt<span style="color: #008000;">&#41;</span>
		<span style="color: #000040;">*</span>t_maxdpt <span style="color: #000080;">=</span> depth<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>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		<span style="color: #666666;">//求該深度最大帶權長度</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>length<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> t_dm<span style="color: #008000;">&#91;</span>depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			t_dm<span style="color: #008000;">&#91;</span>depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> length<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			length<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> length<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">-</span> t_delta<span style="color: #008080;">;</span>
			depth<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> depth<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			count_depth_max_length<span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> check<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> delta,<span style="color: #0000ff;">int</span> ctd,edge <span style="color: #000040;">*</span>f<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>e<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i,j,k<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		d1m<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> d2m<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>FINF<span style="color: #008080;">;</span>
	t_delta <span style="color: #000080;">=</span> delta<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>depth,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>depth<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>length,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>length<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	md1 <span style="color: #000080;">=</span> md2 <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	length<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> depth<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//統計部份1</span>
	t_dm <span style="color: #000080;">=</span> d1m<span style="color: #008080;">;</span>
	t_maxdpt <span style="color: #000080;">=</span> <span style="color: #000040;">&amp;</span>md1<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e <span style="color: #000040;">!</span><span style="color: #000080;">=</span> f<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		length<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">-</span> t_delta<span style="color: #008080;">;</span>
		depth<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		count_depth_max_length<span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">//統計部份2</span>
	t_dm <span style="color: #000080;">=</span> d2m<span style="color: #008080;">;</span>
	t_maxdpt <span style="color: #000080;">=</span> <span style="color: #000040;">&amp;</span>md2<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>f<span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		length<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c <span style="color: #000040;">-</span> t_delta<span style="color: #008080;">;</span>
		depth<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		count_depth_max_length<span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">//單調隊列維護最大值</span>
	<span style="color: #666666;">//確定左邊界</span>
	i <span style="color: #000080;">=</span> U<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>i <span style="color: #000080;">&gt;</span> md1<span style="color: #008000;">&#41;</span>
		i <span style="color: #000080;">=</span> md1<span style="color: #008080;">;</span>
	<span style="color: #666666;">//確定右邊界</span>
	k <span style="color: #000080;">=</span> L<span style="color: #000040;">-</span>i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		k <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	MQ.<span style="color: #007788;">reset</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>U<span style="color: #000040;">-</span>i <span style="color: #000040;">&amp;&amp;</span> j<span style="color: #000080;">&lt;=</span>md2 <span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		MQ.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>j,d2m<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;">double</span> curv,maxv<span style="color: #000080;">=</span><span style="color: #000040;">-</span>INF<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> L<span style="color: #000040;">-</span>i<span style="color: #000080;">&lt;=</span>md2<span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		j <span style="color: #000080;">=</span> U<span style="color: #000040;">-</span>i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">&lt;=</span>md2<span style="color: #008000;">&#41;</span>
			MQ.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>j,d2m<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;">int</span> k <span style="color: #000080;">=</span> MQ.<span style="color: #007788;">getmax</span><span style="color: #008000;">&#40;</span>L<span style="color: #000040;">-</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		curv <span style="color: #000080;">=</span> d1m<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> d2m<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>curv <span style="color: #000080;">&gt;</span> maxv<span style="color: #008000;">&#41;</span>
			maxv <span style="color: #000080;">=</span> curv<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> maxv <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> binary<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> ctd,edge <span style="color: #000040;">*</span>f<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> a<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,b<span style="color: #000080;">=</span>LIM,m<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>b <span style="color: #000040;">-</span> a <span style="color: #000080;">&gt;=</span> <span style="color:#800080;">0.0001</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		m <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>check<span style="color: #008000;">&#40;</span>m,ctd,f<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			a <span style="color: #000080;">=</span> m<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			b <span style="color: #000080;">=</span> m<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> dct<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> start<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> nowt <span style="color: #000080;">=</span> <span style="color: #000040;">++</span>timestamp<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> line <span style="color: #000080;">=</span> get_longest_line<span style="color: #008000;">&#40;</span>start<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>line<span style="color: #000080;">&lt;=</span>L <span style="color: #000040;">||</span> line<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> ctd <span style="color: #000080;">=</span> get_centroid<span style="color: #008000;">&#40;</span>start<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//取得重心</span>
	<span style="color: #0000ff;">double</span> cur<span style="color: #008080;">;</span>
	<span style="color: #666666;">//分割兩部份</span>
	count_size<span style="color: #008000;">&#40;</span>ctd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pls <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>,pls2 <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	edge <span style="color: #000040;">*</span>e,<span style="color: #000040;">*</span>f<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</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: #0000ff;">continue</span><span style="color: #008080;">;</span>
		pls <span style="color: #000040;">+</span><span style="color: #000080;">=</span> size<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>pls <span style="color: #000040;">+</span> pls <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span> <span style="color: #000080;">&gt;=</span> size<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			f <span style="color: #000080;">=</span> e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
			pls2 <span style="color: #000080;">=</span> size<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> pls<span style="color: #008080;">;</span>
			pls<span style="color: #000040;">++</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>
	<span style="color: #666666;">//合併兩部份</span>
	cur <span style="color: #000080;">=</span> binary<span style="color: #008000;">&#40;</span>ctd,f<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cur <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
		Ans <span style="color: #000080;">=</span> cur<span style="color: #008080;">;</span>
	<span style="color: #666666;">//遞歸部份1</span>
	<span style="color: #0000ff;">int</span> j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pls<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&gt;=</span> L<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>f<span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> nowt<span style="color: #008080;">;</span>
		Total <span style="color: #000080;">=</span> pls<span style="color: #008080;">;</span>
		dct<span style="color: #008000;">&#40;</span>ctd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>e<span style="color: #000080;">=</span>f<span style="color: #008080;">;</span>e<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span>nowt<span style="color: #008000;">&#41;</span>
				ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">//遞歸部份2</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pls2<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&gt;=</span> L<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #000040;">!</span><span style="color: #000080;">=</span>f<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> nowt<span style="color: #008080;">;</span>
		Total <span style="color: #000080;">=</span> pls2<span style="color: #008080;">;</span>
		dct<span style="color: #008000;">&#40;</span>ctd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>ctd<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>e<span style="color: #000040;">!</span><span style="color: #000080;">=</span>f<span style="color: #008080;">;</span>e<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#91;</span>j<span style="color: #000080;">=</span>e<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span>nowt<span style="color: #008000;">&#41;</span>
				ava<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #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>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>ava,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>ava<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Total <span style="color: #000080;">=</span> N<span style="color: #008080;">;</span>
	dct<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;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%.3lf<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<hr size="1" /><a name="_ftn1_9307" href="#_ftnref1_9307">[1]</a> 具体证明参见2009年集训队论文《分治算法在树的路径问题中的应用》。</p>
<p><a name="_ftn2_9307" href="#_ftnref2_9307">[2]</a> 树的重心就是满足“删除该点后，剩余的最大的子树顶点数最少”的点。</p>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc-2010-solution/" title="NOI 2010 冬令营 解题报告">NOI 2010 冬令营 解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2010-sort/" title="WC2010 排序机">WC2010 排序机</a></li><li><a href="http://www.byvoid.com/blog/wc2010-efield/" title="WC2010 能量场">WC2010 能量场</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-solutions/" title="NOI解题报告">NOI解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2009-start/" title="出发-NOI2009冬令营">出发-NOI2009冬令营</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/wc2010-rebuild/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>WC2010 能量场</title>
		<link>http://www.byvoid.com/blog/wc2010-efield/</link>
		<comments>http://www.byvoid.com/blog/wc2010-efield/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 07:15:06 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[WC]]></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=1813</guid>
		<description><![CDATA[问题简述 能量场中有N个粒子，每个粒子都有一个质量m和结合系数c，两个粒子a,b合并时会产生mamb(ca - cb)的能量。(1)找出两个粒子相结合，使得产生的能量最大。(2)从中找出任意k个粒子排列成... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc256326565">问题简述</a></h3>
<p>能量场中有N个粒子，每个粒子都有一个质量m和结合系数c，两个粒子a,b合并时会产生m<sub>a</sub>m<sub>b</sub>(c<sub>a </sub>- c<sub>b</sub>)的能量。(1)找出两个粒子相结合，使得产生的能量最大。(2)从中找出任意k个粒子排列成一个环，相邻两个粒子分别合并，使得总能量最大，产生负能量的粒子必须是环上连续的一段。</p>
<h3><a name="_Toc256326566"></a><a name="_Toc241035976">问题</a><a name="_Toc241035977"></a>分析</h3>
<p>乍一看这个问题的第一问好像很简单，枚举每对粒子即可，但是时间复杂度是O(N<sup>2</sup>)的，而且难以想到如何优化。第二问则更加困难，搜索、动态规划是肯定不行的，贪心、图论也难以找到建模方式。分析发现这个问题可以归约到一个0/1规划问题，如果没有特殊性将无法解决，而特殊性无非在于能量产生的公式，因此将目光聚焦到这个公式上，对公式进行一些变形：</p>
<ul>
<li>m<sub>a</sub>m<sub>b</sub>(c<sub>a </sub>- c<sub>b</sub>)</li>
<li>= m<sub>a</sub>m<sub>b</sub>c<sub>a </sub>- m<sub>a</sub>m<sub>b</sub>c<sub>b</sub></li>
<li>= m<sub>a</sub>c<sub>a</sub>m<sub>b &#8211; </sub>m<sub>b</sub>c<sub>b</sub>m<sub>a</sub></li>
<li>设x<sub>i</sub>=m<sub>i</sub>c<sub>i</sub>，y<sub>i</sub>=m<sub>i</sub>则原式</li>
<li>= x<sub>a</sub>*y<sub>b</sub> &#8211; x<sub>b</sub>*y<sub>a</sub></li>
</ul>
<p><span id="more-1813"></span><br />
经过变形，我们可以明显地看出公式变形为了两个向量叉积的公式，这给我们以启发：把每个粒子看做平面上的一个点，两个粒子合并产生的能量就是原点指向两个点的向量的叉积。因此问题的第一问就转化为了：找到两个向量，使它们的叉积最大。而第二问找到一个环合并的公式恰好对应了多边形的面积公式，再加上“<strong>产生负能量的粒子必须是环上连续的一段</strong>”这个限制，这个多边形必须是简单多边形<a name="_ftnref1_8826" href="#_ftn1_8826">[1]</a>。</p>
<p>要使第二问要求的环对应的多边形面积尽量大，应是平面上这些点能组成的最大的简单多边形，那么就应该是这些点的凸包。</p>
<p>相较之下第一问反而更难求解，不过有了对应的几何意义，就容易下手了。两个向量的叉积对应了两个向量所夹的平行四边形的有向面积，要使之最大首先应该是正值，即让第一个向量在第二个向量顺时针方向。当我们确定了第一个向量<a name="_ftnref2_8826" href="#_ftn2_8826">[2]</a>，即确定了平行四边形的一个底边，要使面积最大，应最大化平行四边形的高。于是我们可以做一条与该向量平行的直线，不断向上平移，直到遇到距离最远的点为止，这样的高最大。第一个向量与这个最远的点对应的向量做叉积就是对应的最大面积，很显然这个最远的点一定在凸包上，反过来考虑第一个向量的终点也一定在凸包上，因此查找这对向量时只需考虑凸包上的点。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/03/image.png" border="0" alt="image" width="346" height="316" /></p>
<p>有这个性质以后，如果直接枚举这对顶点，可能会快不少，但时间复杂度依然是O(N<sup>2</sup>)的。这时如果我们以某种特定的顺序枚举第一个向量，可以减少不少枚举量。具体方法是将从原点到凸包上所有的点的向量按照逆时针方向排序，按顺序枚举，这时候我们枚举的向量就是逆时针方向移动的，对应的第二个向量的终点在凸包上也是逆时针顺序移动（从最上点到最左点），因此枚举就是均摊线性的时间复杂度了。</p>
<h3><a name="_Toc256326567">算法描述</a></h3>
<p>1. 将所有粒子抽象为平面第一象限内的一个点(m<sub>i</sub>c<sub>i</sub>,m<sub>i</sub>)。</p>
<p>2. 求平面上点的凸包。</p>
<p>3. 把凸包上的点按照向量极角的顺序排序依次枚举作为第一个向量i。</p>
<p>4. 找到对应第二个向量的终点j，应满足向量&lt;j,j+1&gt;在向量i逆时针方向。</p>
<h3><a name="_Toc256326568"></a><a name="_Toc241035980">复杂度分析</a></h3>
<p>求凸包的时间复杂度为O(NlogN)，枚举最优向量对的时间复杂度为O(N)，因此总体时间复杂度为O(NlogN)。</p>
<h3><a name="_Toc256326569"></a><a name="_Toc241035981">参考程序</a></h3>

<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('p1813code4'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p18134"><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
</pre></td><td class="code" id="p1813code4"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI Winter Camp 2010 efield
 * Author: Guo Jiabao
 * Time: 2010.3.15 12:21
 * Label: Solved
 * Memo: Computing Geometry + Convex Hull + Graham Scan
*/</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;sstream&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;list&gt;</span>
<span style="color: #339900;">#include &lt;deque&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #339900;">#include &lt;queue&gt;</span>
&nbsp;
<span style="color: #339900;">#define var(a,b) typeof(b) a(b)</span>
<span style="color: #339900;">#define foreach(a,b) for (var(a,b.begin());a!=b.end();++a)</span>
<span style="color: #0000ff;">using</span> std<span style="color: #008080;">::</span><span style="color: #007788;">sort</span><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;">50002</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> x,y<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> id<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,ipole<span style="color: #008080;">;</span>
point P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,pole,convex<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
point operator <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point t<span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span>a.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">x</span>,a.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">y</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> t<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> operator <span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> a.<span style="color: #007788;">x</span><span style="color: #000040;">*</span>b.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> b.<span style="color: #007788;">x</span><span style="color: #000040;">*</span>a.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;efield.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;efield.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>
	ipole<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #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: #008000;">&#123;</span>
		<span style="color: #0000ff;">double</span> m,c<span style="color: #008080;">;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf%lf&quot;</span>,<span style="color: #000040;">&amp;</span>m,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> m<span style="color: #000040;">*</span>c<span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> m<span style="color: #008080;">;</span>
		P<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: #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;">y</span> <span style="color: #000080;">&gt;</span> P<span style="color: #008000;">&#91;</span>ipole<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
			ipole <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	pole <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>ipole<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	P<span style="color: #008000;">&#91;</span>ipole<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">--</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point p <span style="color: #000080;">=</span> a <span style="color: #000040;">-</span> pole<span style="color: #008080;">;</span>
	point q <span style="color: #000080;">=</span> b <span style="color: #000040;">-</span> pole<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> fc <span style="color: #000080;">=</span> p <span style="color: #000040;">*</span> q<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fc <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fc <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</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: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> p.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span> p.<span style="color: #007788;">y</span> <span style="color: #000040;">*</span> p.<span style="color: #007788;">y</span> <span style="color: #000080;">&gt;</span> q.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> q.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span> q.<span style="color: #007788;">y</span> <span style="color: #000040;">*</span> q.<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;">void</span> graham<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> top<span style="color: #008080;">;</span>
	sort<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	convex<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> pole<span style="color: #008080;">;</span>
	convex<span style="color: #008000;">&#91;</span>top<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #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;">2</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>
		point p <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span>top<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> convex<span style="color: #008000;">&#91;</span>top<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		point q <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> convex<span style="color: #008000;">&#91;</span>top<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">*</span>q <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			top<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			i<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			convex<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>top<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	N <span style="color: #000080;">=</span> top<span style="color: #008080;">;</span>
	convex<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> getSumArea<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;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,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: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d &quot;</span>,convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #ff0000; font-style: italic;">/*	double SumArea = 0;
	for (i=1;i&lt;=N;i++)
		SumArea += convex[i] * convex[i+1];
	SumArea *= 0.5;*/</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> cmp2<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> a <span style="color: #000040;">*</span> b <span style="color: #000080;">&gt;</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> getPair<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> M <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span>,i,j,ai,aj<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> PairArea <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>
		A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">&lt;</span> convex<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span>
			M <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	sort<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,cmp2<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>,j<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;">while</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">&lt;</span>M <span style="color: #000040;">&amp;&amp;</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>convex<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>convex<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			j<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">==</span> M<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">double</span> cur <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> convex<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>cur <span style="color: #000080;">&gt;</span> PairArea<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			PairArea <span style="color: #000080;">=</span> cur<span style="color: #008080;">;</span>
			ai <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008080;">;</span>
			aj <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,ai,aj<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	graham<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	getPair<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	getSumArea<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>
	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>

<hr size="1" /><a name="_ftn1_8826" href="#_ftnref1_8826">[1]</a> 如果不是简单多边形，则面积公式一定会有多段连续的负值。</p>
<p><a name="_ftn2_8826" href="#_ftnref2_8826">[2]</a> 即顺时针方向下方的那个向量，下同。</p>
<h3>附录</h3>
<p>本题答案不唯一，因此需要一个Special Judge，我写了一个Cena的。使用方法就是编译后放进数据文件夹，添加题目的时候设置自定义校验器，如果实在不会看帮助吧。<br />
下载地址：<a href="http://www.byvoid.com/blog/wp-content/uploads/2010/03/efield-check-cena.zip">efield-check-cena.zip</a><br />
<a href="http://www.byvoid.com/blog/wp-content/uploads/2010/03/image1.png"><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="401" height="336" /></a></p>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc-2010-solution/" title="NOI 2010 冬令营 解题报告">NOI 2010 冬令营 解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2010-sort/" title="WC2010 排序机">WC2010 排序机</a></li><li><a href="http://www.byvoid.com/blog/wc2010-rebuild/" title="WC2010 重建计划">WC2010 重建计划</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-solutions/" title="NOI解题报告">NOI解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2009-start/" title="出发-NOI2009冬令营">出发-NOI2009冬令营</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/wc2010-efield/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>NOI 2009 解题报告</title>
		<link>http://www.byvoid.com/blog/noi-2009-solution/</link>
		<comments>http://www.byvoid.com/blog/noi-2009-solution/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 13:28:11 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[NOI2009]]></category>
		<category><![CDATA[解题报告]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1791</guid>
		<description><![CDATA[这是NOI2009的所有题目的解题报告，虽然很久以前就写好了，还是留到今天才放出来，不算太晚，也不早了。有些题的参考程序是比赛现场写的，直接AC了或作为非完美算法，原封不动地贴了上... ]]></description>
			<content:encoded><![CDATA[<p>这是NOI2009的所有题目的解题报告，虽然很久以前就写好了，还是留到今天才放出来，不算太晚，也不早了。有些题的参考程序是比赛现场写的，直接AC了或作为非完美算法，原封不动地贴了上来。</p>
<p><strong><a href="http://www.byvoid.com/files/oi/NOI2009.solution.rar" target="_blank">打包下载</a></strong></p>
<p>Day1</p>
<p><a title="Permanent Link to NOI 2009 变换序列" rel="bookmark" href="http://www.byvoid.com/blog/noi-2009-transform/">NOI 2009 变换序列</a></p>
<p><a title="Permanent Link to NOI 2009 诗人小G" rel="bookmark" href="http://www.byvoid.com/blog/noi-2009-poet/">NOI 2009 诗人小G</a></p>
<p><a title="Permanent Link to NOI 2009 二叉查找树" rel="bookmark" href="http://www.byvoid.com/blog/noi-2009-treapmod/">NOI 2009 二叉查找树</a></p>
<p>Day2</p>
<p><a title="Permanent Link to NOI 2009 植物大战僵尸" rel="bookmark" href="http://www.byvoid.com/blog/noi-2009-pvz/">NOI 2009 植物大战僵尸</a></p>
<p><a title="Permanent Link to NOI 2009 管道取珠" rel="bookmark" href="http://www.byvoid.com/blog/noi-2009-ball/">NOI 2009 管道取珠</a></p>
<p><a title="Permanent Link to NOI 2009 描边" rel="bookmark" href="http://www.byvoid.com/blog/noi-2009-path/">NOI 2009 描边</a></p>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc-2010-solution/" title="NOI 2010 冬令营 解题报告">NOI 2010 冬令营 解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2010-sort/" title="WC2010 排序机">WC2010 排序机</a></li><li><a href="http://www.byvoid.com/blog/wc2010-rebuild/" title="WC2010 重建计划">WC2010 重建计划</a></li><li><a href="http://www.byvoid.com/blog/wc2010-efield/" title="WC2010 能量场">WC2010 能量场</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-path/" title="NOI 2009 描边">NOI 2009 描边</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-ball/" title="NOI 2009 管道取珠">NOI 2009 管道取珠</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2009-solution/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
