<?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; 1998</title>
	<atom:link href="http://www.byvoid.com/blog/tag/1998/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.byvoid.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 29 Jun 2010 08:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>NOI 1998 解题报告</title>
		<link>http://www.byvoid.com/blog/noi-1998-solution/</link>
		<comments>http://www.byvoid.com/blog/noi-1998-solution/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 12:30:19 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[1998]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[最短路径]]></category>
		<category><![CDATA[贪心]]></category>
		<category><![CDATA[随机]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=892</guid>
		<description><![CDATA[这是NOI计划的第二份题解。NOI1998的6道题是[个人所得税][免费馅饼][围巾裁剪][SERNET模拟][软件安装盘][并行计算]，相对于NOI1997要稍难一些，不过还都是可以接受的。 [个人所得税]是一个简单题... ]]></description>
			<content:encoded><![CDATA[<p>这是<a href="http://www.byvoid.com/blog/noi-plan/" target="_blank">NOI计划</a>的第二份题解。<strong>NOI1998</strong>的6道题是[个人所得税][免费馅饼][围巾裁剪][SERNET模拟][软件安装盘][并行计算]，相对于NOI1997要稍难一些，不过还都是可以接受的。</p>
<p>[个人所得税]是一个简单题，[免费馅饼][围巾裁剪]是基本的动态规划问题，难度都还算容易。[SERNET模拟]涉及到了图论的最短路算法构造，需要稍稍思考。[软件安装盘]是一个比较困难的搜索题，目前还没有较好的方法。[并行计算]用了随机+贪心的方法，细节非常多，构造也不是很容易。</p>
<p>做这些题花了我8天时间，主要原因是在[并行计算]上浪费了过多的时间，接下来要掌握节奏。</p>
<p><span id="more-892"></span><strong>[个人所得税]</strong></p>
<p>这是最简单的题了，注意读懂题意，按照规则模拟就行了。一次性收入直接统计，按月收入要先把每个人的每月收入统计出，最后计算。</p>

<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('p892code7'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8927"><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
</pre></td><td class="code" id="p892code7"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1998 personaltax
 * Author: Guo Jiabao
 * Time: 2009.2.17 14:03
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">double</span> income<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> s<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> w<span style="color: #000080;">=</span>s<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">4000</span><span style="color: #008000;">&#41;</span>
		w<span style="color: #000040;">-</span><span style="color: #000080;">=</span><span style="color: #0000dd;">800</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		w<span style="color: #000040;">*</span><span style="color: #000080;">=</span><span style="color:#800080;">0.8</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<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: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">20000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> w<span style="color: #000040;">*</span><span style="color:#800080;">0.2</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">50000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">4000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">20000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.3</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">4000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">9000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">50000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.4</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> wage<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> s<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> w<span style="color: #000080;">=</span>s<span style="color: #000040;">-</span><span style="color: #0000dd;">800</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<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: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">500</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> w<span style="color: #000040;">*</span><span style="color:#800080;">0.05</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">2000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">500</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">5000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">2000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.15</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">20000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #0000dd;">450</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">5000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.2</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">40000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #0000dd;">450</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">20000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.25</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">60000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #0000dd;">450</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">5000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">40000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.3</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">80000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #0000dd;">450</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">5000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">6000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">60000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.35</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">100000</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #0000dd;">450</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">5000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">6000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">7000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">80000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.40</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">25</span><span style="color: #000040;">+</span><span style="color: #0000dd;">150</span><span style="color: #000040;">+</span><span style="color: #0000dd;">450</span><span style="color: #000040;">+</span><span style="color: #0000dd;">3000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">5000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">6000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">7000</span><span style="color: #000040;">+</span><span style="color: #0000dd;">8000</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>w<span style="color: #000040;">-</span><span style="color: #0000dd;">100000</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">0.45</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> pm<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">50001</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#93;</span>,M<span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> Total<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">char</span> c,ct<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i,j,id,month,t,s<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;personaltax.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;personaltax.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>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Total<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #FF0000;">'#'</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%s%d%d&quot;</span>,ct,<span style="color: #000040;">&amp;</span>id,<span style="color: #000040;">&amp;</span>month<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>t,<span style="color: #000040;">&amp;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ct<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'I'</span><span style="color: #008000;">&#41;</span>
			Total<span style="color: #000040;">+</span><span style="color: #000080;">=</span>income<span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			pm<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>month<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>s<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">do</span> c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">||</span> c<span style="color: #000080;">==</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">ungetc</span><span style="color: #008000;">&#40;</span>c,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">12</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			Total<span style="color: #000040;">+</span><span style="color: #000080;">=</span>wage<span style="color: #008000;">&#40;</span>pm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%.2lfn&quot;</span>,Total<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>

<p><strong>[免费馅饼]</strong></p>
<p>很明显的动态规划，但是要注意细节。“开始时游戏者站在舞台的正中央”，“当馅饼在某一秒末恰好到达游戏者所在的格子中，游戏者就收集到了这块馅饼。”对于每个馅饼，只有恰好到达才算能接住，也就是如果(高度-1)能够整除下落速度，才可以被接到。</p>
<p>明确题意以后，首先预处理出每个馅饼的落地时间，落地时间相同的馅饼可以合并为一个。定义V[i,j]为时间为i秒时，恰好落到地上第j格的馅饼总价值。</p>
<p>状态设定</p>
<ul>
<li>F[i,j]表示第i秒游戏者在第j格时的最大得分。</li>
</ul>
<p>状态转移方程</p>
<pre>F[i,j]=Max
{
	F[i-1,j-2];
	F[i-1,j-1];
	F[i-1,j];
	F[i-1,j+1];
	F[i-1,j+2];
} + V[i,j];</pre>
<p>同时要记录每个状态的转移来源，以输出每秒的策略。</p>
<p>初始状态</p>
<ul>
<li>F[i,j]=负无穷大</li>
<li>F[0,(W+1)/2]=0 或者如果第0秒就能接到馅饼的价值</li>
</ul>
<p>目标状态</p>
<ul>
<li>Max{F[i,j]}</li>
</ul>
<p>时间复杂度 O(W*T)</p>

<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('p892code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8928"><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
</pre></td><td class="code" id="p892code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1998 freepizza
 * Author: Guo Jiabao
 * Time: 2009.2.21 14:19
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXT<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span>,MAXW<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> W,H,N,T,Ans,AT,AP<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXW<span style="color: #008000;">&#93;</span>,V<span style="color: #008000;">&#91;</span>MAXT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXW<span style="color: #008000;">&#93;</span>,G<span style="color: #008000;">&#91;</span>MAXT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXW<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,t,p,v,s,dt<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;freepizza.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;freepizza.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>W,<span style="color: #000040;">&amp;</span>H<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>t,<span style="color: #000040;">&amp;</span>p,<span style="color: #000040;">&amp;</span>v,<span style="color: #000040;">&amp;</span>s<span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>H<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>v<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> t<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			dt<span style="color: #000080;">=</span>t<span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>H<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>v<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dt<span style="color: #000080;">&gt;</span>T<span style="color: #008000;">&#41;</span> T<span style="color: #000080;">=</span>dt<span style="color: #008080;">;</span>
			V<span style="color: #008000;">&#91;</span>dt<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>s<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>T<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			F<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>INF<span style="color: #008080;">;</span>
	p<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>W<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	Ans<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>T<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> F<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>F<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> F<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>F<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>F<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>W <span style="color: #000040;">&amp;&amp;</span> F<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>F<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #000080;">&lt;=</span>W <span style="color: #000040;">&amp;&amp;</span> F<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>F<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Ans<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				AT<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
				AP<span style="color: #000080;">=</span>j<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,Ar<span style="color: #008000;">&#91;</span>MAXT<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>AT,j<span style="color: #000080;">=</span>AP<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Ar<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		j<span style="color: #000040;">-</span><span style="color: #000080;">=</span>G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>T<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> Ans<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: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;0n&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>AT<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ar<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[围巾裁剪]</strong></p>
<p>这道题的方法是动态规划，由于要解决寻找两个子三角形的面积和最大，我们可以先简化问题，就是找一个最大的。</p>
<p>找一个最大的子三角形，要分为正着和倒着两种情况。对于正着放的情况，设定状态F[i,j]表示以第i行第j列的三角形为上顶点的子三角形的最大高度。</p>
<p>状态转移方程就是</p>
<pre>F[i,j]=
{
	0; //(i,j)被标记为不可用
	1; //(i+1,j) (i+1,j+1) (i+1,j+2) 至少有一个不在界限内或者被标记为不可用
	Min { F[i+1,j] , F[i+1,j+2] } + 1; //不符合以上两个情况
}</pre>
<p>对于倒着放的情况，设定状态G[i,j]表示以第i行第j列的三角形为下顶点的子三角形的最大高度。</p>
<pre>G[i,j]=
{
	0; //(i,j)被标记为不可用
	1; //(i-1,j) (i-1,j-1) (i-1,j-2) 至少有一个不在界限内或者被标记为不可用
	Min { G[i-1,j] , G[i-1,j-2] } + 1; //不符合以上两个情况
}</pre>
<p>上述简化的问题的答案就是Max{ Max{F[i,j]^2},Max{G[i,j]^2} }。</p>
<p>考虑找两个和最大三角形，没有局部最优策略可供利用，不能直接动态规划。于是可以想到枚举分割线，把图形分成一个小三角形和一个梯形，但后分别在两个区域内动态规划，求出两个区域内的值的和的最大值即可。</p>
<p>分割线枚举有三个方向，要O(N)次枚举分割，所以总的时间复杂度为O(N^3)。</p>

<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('p892code9'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8929"><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
</pre></td><td class="code" id="p892code9"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1998 scarfcut
 * Author: Guo Jiabao
 * Time: 2009.2.18 20:05
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,dev,dm,NewAns,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> forbid<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,x,y<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;scarfcut.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;scarfcut.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>x,<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		forbid<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> Min<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> a<span style="color: #000080;">&lt;</span>b<span style="color: #008080;">?</span>a<span style="color: #008080;">:</span>b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> area<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">||</span> a<span style="color: #000080;">&gt;</span>N <span style="color: #000040;">||</span> b<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">||</span> b<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>a<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dm<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> a<span style="color: #000080;">&lt;=</span>dev<span style="color: #008080;">?</span><span style="color: #0000dd;">1</span><span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dm<span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> b<span style="color: #000080;">&lt;=</span>dev<span style="color: #008080;">?</span><span style="color: #0000dd;">1</span><span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&gt;=</span>N<span style="color: #000040;">-</span>dev<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> b<span style="color: #000080;">&lt;=</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>N<span style="color: #000040;">-</span>dev<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">?</span><span style="color: #0000dd;">1</span><span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,o,b,M1<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,M2<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>N<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		o<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>o<span style="color: #008080;">;</span>j<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			b<span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>forbid<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> b<span style="color: #000040;">!</span><span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,j<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> b<span style="color: #000040;">!</span><span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> b<span style="color: #000040;">!</span><span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,j<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>forbid<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> forbid<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> forbid<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Min<span style="color: #008000;">&#40;</span> F<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> , F<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: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>M1<span style="color: #008000;">&#41;</span>
				M1<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>M2<span style="color: #008000;">&#41;</span>
				M2<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		o<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>o<span style="color: #008080;">;</span>j<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			b<span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>forbid<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> b<span style="color: #000040;">!</span><span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,j<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> b<span style="color: #000040;">!</span><span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> b<span style="color: #000040;">!</span><span style="color: #000080;">=</span>area<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>forbid<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> forbid<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> forbid<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Min<span style="color: #008000;">&#40;</span> F<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: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> , F<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>M1<span style="color: #008000;">&#41;</span>
				M1<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>M2<span style="color: #008000;">&#41;</span>
				M2<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> M1<span style="color: #000040;">*</span>M1<span style="color: #000040;">+</span>M2<span style="color: #000040;">*</span>M2<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>dm<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>dm<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>dm<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>dev<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>dev<span style="color: #000080;">&lt;=</span>N<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>dev<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			NewAns<span style="color: #000080;">=</span>dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>NewAns<span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
				Ans<span style="color: #000080;">=</span>NewAns<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&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>

<p><strong>[SERNET模拟]</strong></p>
<p>不能直接模拟数据包传输，必须采用更好的算法。由于每个数据包之间没有任何影响，我们可以把它们独立开来看。对于一个数据包，定义它在网络中持续到的时刻是last，那么在时刻T后还存在于网络中的充分必要条件是last&gt;T。</p>
<p>设一个数据包的起始点是Start，目标点是Target，发出时间是Stime。 由于每个节点不会再发送已经接受过数据包，设想一下数据包的传输，我们可以想到信号最先到达点的时间一定是延最短路径传播的。每个节点只会转发一次同一个 数据包，以后接受的都会吸收，所以数据包的在网络中最大持续时间一定与最短路径有关，而且还取决于每个节点连出的最长边。总而言之，持续时间为从起始点 Start出发的到顶点i最短路径的长度与连出i的最长边的最大值。</p>
<p>于是，我们定义以点Start出发的到点i的最短路径是shortest[i]，从点i出发的最长边是far[i]，注意far[Target]=0。则有</p>
<ul>
<li>last=Max{shortest[i]+far[i]} + Stime</li>
</ul>
<p>根据上述式子，只需对每个数据包求一次单源最短路即可。由于单元最短路算法使用的不同，定义SSSP(N,M)为N个顶点，M条边单源最短路算法的 时间复杂度，例如Floyd(N,M)=O(N^3)，朴素的Dijkstra(N,M)=O(N^2)。所以总的时间复杂度为 O(K*SSSP(N,M))。</p>

<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('p892code10'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p89210"><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
</pre></td><td class="code" id="p892code10"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1998 sernet
 * Author: Guo Jiabao
 * Time: 2009.2.23 13:25
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span>,MAXK<span style="color: #000080;">=</span><span style="color: #0000dd;">10001</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> packet
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> id,s,t,stime<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>P<span style="color: #008000;">&#91;</span>MAXK<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,K,S,T,dia,QuestTime,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> mapping<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,adjm<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,dist<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,farest<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,a,b,v<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;sernet.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;sernet.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mapping<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			adjm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
		adjm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b,<span style="color: #000040;">&amp;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		a<span style="color: #000080;">=</span>mapping<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>b<span style="color: #000080;">=</span>mapping<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000080;">&gt;</span>farest<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> farest<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000080;">&gt;</span>farest<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> farest<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
		adjm<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>adjm<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>K<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>K<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">stime</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</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>QuestTime<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> floyd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,k<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>adjm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">==</span>S <span style="color: #000040;">||</span> k<span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">==</span>S<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>dist<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>dist<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	i<span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>j <span style="color: #000040;">&amp;&amp;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>T <span style="color: #000040;">&amp;&amp;</span> j<span style="color: #000040;">!</span><span style="color: #000080;">=</span>S <span style="color: #000040;">&amp;&amp;</span> dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>INF<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			k<span style="color: #000080;">=</span>farest<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>j<span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span> k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> k<span style="color: #000080;">&gt;</span>dia<span style="color: #008000;">&#41;</span>
				dia<span style="color: #000080;">=</span>dist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> k<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">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>K<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		S<span style="color: #000080;">=</span>mapping<span style="color: #008000;">&#91;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>T<span style="color: #000080;">=</span>mapping<span style="color: #008000;">&#91;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		dia<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		floyd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> last<span style="color: #000080;">=</span>dia<span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">stime</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>last<span style="color: #000080;">&gt;</span>QuestTime<span style="color: #008000;">&#41;</span>
			Ans<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #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;%dn&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>

<p><strong>[软件安装盘]</strong></p>
<p>这是一个比较令人头痛的问题，对于极端的数据，目前还没有能够保证正确性的有效的算法。我的算法是搜索+卡时，我的算法可以使最优解在前1秒的搜索内有较大的出现的概率，但还是不能保证一定正确。</p>
<p>首先拓扑排序一下，保证每个组件的依赖出现在这个组件之前。按照组件的顺序搜索，枚举每个可以放置的安装盘。要满足安装盘空间足够，而且安装盘的编号大于等于所依赖的所有组件的位置的最大值。搜索中如果发现当前需要的安装盘的个数大于已知最优解，可以剪枝。</p>
<p>北极天南星大牛给出了一种贪心的优化搜索的方法，但是仍不能保证其正确性。</p>

<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('p892code11'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p89211"><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
</pre></td><td class="code" id="p892code11"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1998 software
 * Author: Guo Jiabao
 * Time: 2009.2.22 21:23
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;ctime&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> module
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> size,rcnt,acnt<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> affect<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> rely<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>md<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,Space,Ans<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span>,Lim,st<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> position<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,used<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Ansp<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Start<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;software.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;software.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>Space,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">13</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>c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">13</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">&gt;=</span><span style="color: #FF0000;">'0'</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000080;">&lt;=</span><span style="color: #FF0000;">'9'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">||</span> c<span style="color: #000080;">==</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #0000dd;">ungetc</span><span style="color: #008000;">&#40;</span>c,<span style="color: #0000ff;">stdin</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>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">rely</span><span style="color: #008000;">&#91;</span> <span style="color: #000040;">++</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">rcnt</span> <span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">rcnt</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			md<span style="color: #008000;">&#91;</span> md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">rely</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#93;</span>.<span style="color: #007788;">affect</span><span style="color: #008000;">&#91;</span> md<span style="color: #008000;">&#91;</span> md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">rely</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span> <span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		Start<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: #008000;">&#125;</span>
	st<span style="color: #000080;">=</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ans<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>Ans<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #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>
		A<span style="color: #008000;">&#91;</span> Ansp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span> <span style="color: #000040;">++</span>A<span style="color: #008000;">&#91;</span> Ansp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>Ans<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>j<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>,A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k,<span style="color: #0000ff;">int</span> pcnt<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>st<span style="color: #008000;">&#41;</span>
		print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i,j,start<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span>,b<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">&gt;</span>N<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pcnt<span style="color: #000080;">&lt;</span>Ans<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			Ans<span style="color: #000080;">=</span>pcnt<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>
				Ansp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>position<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>Start<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>Lim <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>b <span style="color: #000040;">&amp;&amp;</span> i<span style="color: #000080;">&lt;</span>Ans<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>md<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #000080;">&gt;</span>Space<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>i<span style="color: #000080;">&gt;</span>pcnt<span style="color: #008000;">&#41;</span>
			pcnt<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			b<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>md<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008080;">;</span>
		position<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			A<span style="color: #008000;">&#91;</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">affect</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Start<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>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">affect</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>Start<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				Start<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">affect</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		dfs<span style="color: #008000;">&#40;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,pcnt<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>md<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			Start<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">=</span>md<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	Lim<span style="color: #000080;">=</span>N<span style="color: #008080;">;</span>
	dfs<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">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>
&nbsp;
	print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[并行计算]</strong></p>
<p>很强悍的题，随机+贪心。首先是建立一棵表达式树，方法是从右向左扫描式子，遇到最低级的运算符就把式子分为左右两部分，递归进入扫描，建成一棵表达式树。</p>
<p>表达式树的每个节点可能是一个值也可能是运算符，每个节点要存储其父节点的运算符号op，最初的叶节点都是字母。定义每个节点的ftime 为可使用的时刻，address为存储的地址。定义R[i](i=1,2)为运算器i上次运算完成后的时刻，初始R[1]=R[2]=0。</p>
<p>基本的算法是，每次随机找出一对可合并节点(a,b)，将这两个节点合并，尽量使用R[p]较小的运算器p，必须满足 max{a.ftime,b.ftime}&lt;=R[p] ，如果不满足，则使用另一个（两者必有其一满足）。直到合并完所有的节点，根节点的ftime值就是总时间。重复上述过程1000次以上，保留最后时间最 小的解，最后能给出稳定的接近最优的解，实际上是最优解的概率已经很大。</p>
<p>合并实质就是计算a [b.op] b，方法是把计算后的新地址放到a节点处，然后把b删除（实际上为了保护树的结构不需要真正删除，只需标记“已被删除”）。重要的是，删除后要收缩孤立 点，孤立点就是没有兄弟的叶节点，用孤立点取代其父亲节点。当b就是a的兄弟节点，这时a已经成了孤立点，收缩a。如果b不是a的兄弟节点，且b的兄弟节 点是一个叶节点，此时b的兄弟节点成为了孤立点，收缩b的兄弟节点。</p>
<p>对于收缩节点p，检查p是否已经没有兄弟节点，令p取代其父节点的ftime和address值，然后删除p，访问p的父亲，继续检查，知道p已经有兄弟节点，或者已经到了根节点。</p>
<p>可合并的点对(a,b)并不是任意的，必须满足a和b在同一运算优先级的区间内，在表达式树中的表示就是a,b之间的路径不能跨越不同优先 级的运算符的节点。a和b显然必须是叶节点，其中a还应该满足a是其父亲的左子节点或者a.op为+或*。在随机选取a，b时，可以先从叶节点中随机取出 一个节点，另其为b，然后从b出发搜索出与b在同一运算优先级区间内所有的节点的集合，然后在此集合中随机取出a即可。</p>
<p>该算法的时间复杂度为O(K*N^2)，K为重复贪心的次数，是常数，N为表达式中字母个数(N&lt;=100)。</p>

<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('p892code12'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p89212"><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
</pre></td><td class="code" id="p892code12"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1998 parallel
 * Author: Guo Jiabao
 * Time: 2009.2.20 21:52
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXP<span style="color: #000080;">=</span><span style="color: #0000dd;">1000</span>,MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">300</span>,MAX_Repeat<span style="color: #000080;">=</span><span style="color: #0000dd;">1000</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> et_node
<span style="color: #008000;">&#123;</span>
	et_node <span style="color: #000040;">*</span>left,<span style="color: #000040;">*</span>right,<span style="color: #000040;">*</span>brother,<span style="color: #000040;">*</span>father<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> v<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> ftime,address,op,id<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> is_left<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> instruct
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Time,Alu,Op,A1,A2,A3<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> Solution
<span style="color: #008000;">&#123;</span>
	instruct I<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> eadd,etime,IC<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Len,EC<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,Acnt,SC,Lcnt,opdevide,SAC<span style="color: #008080;">;</span>
<span style="color: #0000ff;">char</span> Ex<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> usedletter<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">300</span><span style="color: #008000;">&#93;</span>,vis<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> lt2add<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">300</span><span style="color: #008000;">&#93;</span>,bk<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span>,RT<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>,T<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
et_node ES<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>root,<span style="color: #000040;">*</span>S<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>SA<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
Solution Best,Current<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,Lv<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span>,Lp<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;parallel.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;parallel.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%dn%s&quot;</span>,<span style="color: #000040;">&amp;</span>T<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>T<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>T<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>T<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span>,Ex<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Len<span style="color: #000080;">=</span><span style="color: #0000dd;">strlen</span><span style="color: #008000;">&#40;</span>Ex<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>Lp<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>Len<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		usedletter<span style="color: #008000;">&#91;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'('</span><span style="color: #008000;">&#41;</span>
			Lv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Lp<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">')'</span><span style="color: #008000;">&#41;</span>
			bk<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Lv<span style="color: #008000;">&#91;</span>Lp<span style="color: #000040;">--</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Lcnt<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: #FF0000;">'A'</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span><span style="color: #FF0000;">'Z'</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>usedletter<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			lt2add<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">++</span>Lcnt<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> getoperator<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> s<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #FF0000;">'+'</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #FF0000;">'-'</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #FF0000;">'*'</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addshrink<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span>a<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	S<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>SC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> delshrink<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span>a<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> k<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>SC<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>a<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	S<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>S<span style="color: #008000;">&#91;</span>SC<span style="color: #000040;">--</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> et_node<span style="color: #000040;">*</span> et_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #000040;">++</span>EC<span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span><span style="color: #000080;">=</span>ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">right</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #000080;">=</span>EC<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">&amp;</span>ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
et_node<span style="color: #000040;">*</span> et_build<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> l,<span style="color: #0000ff;">int</span> r<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> fnd<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	et_node <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span>et_new<span style="color: #008000;">&#40;</span><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>r<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #000080;">=</span>Ex<span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">')'</span> <span style="color: #000040;">&amp;&amp;</span> bk<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>l<span style="color: #008000;">&#41;</span>
		l<span style="color: #000040;">++</span>,r<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span>l<span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">')'</span><span style="color: #008000;">&#41;</span>
			i<span style="color: #000080;">=</span>bk<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'+'</span> <span style="color: #000040;">||</span> Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'-'</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			fnd<span style="color: #000080;">=</span><span style="color: #0000ff;">true</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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>fnd<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span>l<span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">')'</span><span style="color: #008000;">&#41;</span>
				i<span style="color: #000080;">=</span>bk<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'*'</span> <span style="color: #000040;">||</span> Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'/'</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #000080;">=</span>Ex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>et_build<span style="color: #008000;">&#40;</span>l,i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>et_build<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,r<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>is_left<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>is_left<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">=</span>getoperator<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> clear<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">&gt;=</span><span style="color: #FF0000;">'A'</span> <span style="color: #000040;">&amp;&amp;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">&lt;=</span><span style="color: #FF0000;">'Z'</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">=</span>lt2add<span style="color: #008000;">&#91;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		addshrink<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		clear<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		clear<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> addinstruction<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p,<span style="color: #0000ff;">int</span> op,<span style="color: #0000ff;">int</span> a1,<span style="color: #0000ff;">int</span> a2,<span style="color: #0000ff;">int</span> a3<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	Current.<span style="color: #007788;">IC</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>Current.<span style="color: #007788;">IC</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Time</span><span style="color: #000080;">=</span>RT<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>Current.<span style="color: #007788;">IC</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Alu</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>Current.<span style="color: #007788;">IC</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Op</span><span style="color: #000080;">=</span>op<span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>Current.<span style="color: #007788;">IC</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A1</span><span style="color: #000080;">=</span>a1<span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>Current.<span style="color: #007788;">IC</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A2</span><span style="color: #000080;">=</span>a2<span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>Current.<span style="color: #007788;">IC</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A3</span><span style="color: #000080;">=</span>a3<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> samelevel<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>a<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #000040;">||</span>a<span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #000040;">||</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>a<span style="color: #000080;">==</span><span style="color: #0000dd;">3</span><span style="color: #000040;">||</span>a<span style="color: #000080;">==</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">3</span><span style="color: #000040;">||</span>b<span style="color: #000080;">==</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> geta<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p <span style="color: #000040;">||</span> vis<span style="color: #008000;">&#91;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	vis<span style="color: #008000;">&#91;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>is_left <span style="color: #000040;">||</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">||</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #000080;">==</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span>
			SA<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>SAC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>samelevel<span style="color: #008000;">&#40;</span>getoperator<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>,opdevide<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color:#800080;">2</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>r<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		geta<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		geta<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		geta<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		geta<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	geta<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> getab<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>a,et_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	a<span style="color: #000080;">=</span>b<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>a<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		b<span style="color: #000080;">=</span>S<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>SC<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		opdevide<span style="color: #000080;">=</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #008080;">;</span>
		<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>vis,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>vis<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		vis<span style="color: #008000;">&#91;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>id<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		SAC<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		geta<span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		geta<span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		geta<span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>SAC<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			a<span style="color: #000080;">=</span>SA<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>SAC<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> contract<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span>a<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	delshrink<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother <span style="color: #000040;">&amp;&amp;</span> a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<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>
		a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #008080;">;</span>
		a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #008080;">;</span>
		a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		a<span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000040;">!</span><span style="color: #000080;">=</span>root<span style="color: #008000;">&#41;</span>
		addshrink<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> bind<span style="color: #008000;">&#40;</span>et_node <span style="color: #000040;">*</span>a,et_node <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	delshrink<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">=</span>Acnt<span style="color: #008080;">;</span>
	b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother<span style="color: #008000;">&#41;</span>
		contract<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		contract<span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>brother<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> greedy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> p,op<span style="color: #008080;">;</span>
	et_node <span style="color: #000040;">*</span>a,<span style="color: #000040;">*</span>b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>SC<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		getab<span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>RT<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;=</span>RT<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			p<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			p<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #000080;">&lt;=</span>RT<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #000080;">&lt;=</span>RT<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			p<span style="color: #000080;">=</span><span style="color: #0000dd;">3</span><span style="color: #000040;">-</span>p<span style="color: #008080;">;</span>
		op<span style="color: #000080;">=</span>b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>op<span style="color: #008080;">;</span>
		addinstruction<span style="color: #008000;">&#40;</span>p,op,a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address,b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address,<span style="color: #000040;">++</span>Acnt<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		RT<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #000080;">=</span>RT<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>T<span style="color: #008000;">&#91;</span>op<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		bind<span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Current.<span style="color: #007788;">eadd</span><span style="color: #000080;">=</span>root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>address<span style="color: #008080;">;</span>
	Current.<span style="color: #007788;">etime</span><span style="color: #000080;">=</span>root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ftime<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	root<span style="color: #000080;">=</span>et_build<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,Len<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>father<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Best.<span style="color: #007788;">etime</span><span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> Repeat<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Repeat<span style="color: #000080;">&lt;=</span>MAX_Repeat<span style="color: #008080;">;</span>Repeat<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		clear<span style="color: #008000;">&#40;</span>root<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		RT<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>RT<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Current.<span style="color: #007788;">IC</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		Acnt<span style="color: #000080;">=</span>Lcnt<span style="color: #008080;">;</span>
		greedy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Current.<span style="color: #007788;">etime</span><span style="color: #000080;">&lt;</span>Best.<span style="color: #007788;">etime</span><span style="color: #008000;">&#41;</span>
			Best<span style="color: #000080;">=</span>Current<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">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>Best.<span style="color: #007788;">IC</span><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;OP %d %d %d %d %d %dn&quot;</span>,
		Best.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Time</span>,Best.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Alu</span>,Best.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Op</span>,Best.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A1</span>,Best.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A2</span>,Best.<span style="color: #007788;">I</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A3</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;END %d %dn&quot;</span>,Best.<span style="color: #007788;">etime</span>,Best.<span style="color: #007788;">eadd</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">个人所得税</span></h2>
<p>某国个人所得税法规定，普通公民的主要应纳税收入项目及纳税金额如下：</p>
<p>工资、薪金所得。按月计算征税，以每月收入额减除费用800元后的余额作为该月应纳税所得额，税率如下表所示：</p>
<pre>级数	月应纳税所得额	税率（%）
1	不超过500元的	5
2	超过500元~2000元的部分	10
3	超过2000元~5000元的部分	15
4	超过5000元~20000元的部分	20
5	超过20000元~40000元的部分	25
6	超过40000元~60000元的部分	30
7	超过60000元~80000元的部分	35
8	超过80000元~100000元的部分	40
9	超过100000元的部分	45</pre>
<p>一次性劳动报酬所得。按次计算征税，每次不超过4000元的，减除费用800元；4000元以上的，减除20%的费用，余额为应纳税所得额。征税税率如下表所示：</p>
<pre>级数	每次应纳税所得额	税率（%）
1	不超过20000元的部分	20
2	超过20000元~50000元的部分	30
3	超过50000元的部分	40</pre>
<p>由上面可以看出，个人工资、薪金及一次性劳动报酬所得都是按照超额累进税率来征税的。超额累进税率将应纳税所得额按数额大小分成若干等级，每一等级 规定一个税率，税率依次提高，但每一纳税人的的应纳税所得额依照所属等级同时适用几个税率分别计算，将计算结果相加后的总额作为应纳税款。</p>
<p>例如，某人某月工资总额为3800元，减去800元后，应纳税所得额为3000元。其中1级500元，2级1500元，3级1000元， 税率分别为5%、10%、15%，应纳税总额为500*5%+1500*10%+1000*15%=325（元）。现在需要你编一程序，根据该国某公司的 所有职员一年内的各项收入信息（收入项目、收入时间、收入金额）计算该公司所有职员这一年应交纳的个人所得税总额。</p>
<p>输入</p>
<p>输入文件的第一行为一个正整数M（M&lt;= 50000），表示该公司的职员总数（职员编号依次为1,2,…,M）。接下来的各行每行表示一年内某一个职员的一项收入信息。具体格式如下： 工资、薪金收入信息：PAY 职员编号 收入时间 收入金额</p>
<p>一次性劳务报酬收入信息：INCOME 职员编号 收入时间 收入金额</p>
<p>其中，收入时间格式为：MM/DD，MM表示月份（1&lt;= MM&lt;=12），DD表示日期（1&lt;= DD&lt;=31）；收入金额是一个正整数（单位：元），并假设每人每项收入金额小于100万元。</p>
<p>输入文件以字符“#”表示结束。输入文件中同一行相邻两项之间用一个或多个空格隔开。</p>
<p>输出</p>
<p>输出文件只有一个正数P(保留两位小数)，P表示该公司所有职员一年内应交纳的个人所得税总额（单位：元）。</p>
<p>样例输入</p>
<pre>2
PAY 1 2/23 3800
INCOME 2 4/8 4010
INCOME 2 4/18 800
PAY 1 8/14 6700
PAY 1 8/10 1200
PAY 2 12/10 20000
#</pre>
<p>样例输出</p>
<pre>5476.60</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">免费馅饼 </span></h2>
<p>SERKOI最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为W格，天幕的高度为H格，游戏者占一格。开始时游戏者站在舞台的正中央，手里拿着一个托盘。下图为天幕的高度为4格时某一个时刻游戏者接馅饼的情景。</p>
<p><a class="image" title="Image:Freepizza.gif" href="http://www.ruvtex.cn/wiki/Image:Freepizza.gif"><img longdesc="/wiki/Image:Freepizza.gif" src="http://www.ruvtex.cn/mw/images/4/47/Freepizza.gif" alt="Image:Freepizza.gif" width="384" height="215" /></a></p>
<p>游戏开始后，从舞台天幕顶端的格子中不断出现馅饼并垂直下落。游戏者左右移动去接馅饼。游戏者每秒可以向左或向右移动一格或两格，也可以站在原地不动。</p>
<p>馅饼有很多种，游戏者事先根据自己的口味，对各种馅饼依次打了分。同时，在8-308电脑的遥控下，各种馅饼下落的速度也是不一样的，下落速度以格/秒为单位。</p>
<p>当馅饼在某一秒末<strong>恰好</strong>到达游戏者所在的格子中，游戏者就收集到了这块馅饼。</p>
<p>写一个程序，帮助我们的游戏者收集馅饼，使得所收集馅饼的分数之和最大。</p>
<p>输入</p>
<p>输入文件的第一行是用空格隔开的两个正整数，分别给出了舞台的宽度W（1到99之间的奇数）和高度H（1到100之间的整数）。</p>
<p>接下来依馅饼的初始下落时间顺序给出了所有馅饼的信息。每一行给出了一块馅饼的信息。由四个正整数组成，分别表示了馅饼的初始下落时刻（0到1000秒），水平位置、下落速度（1到100）以及分值。游戏开始时刻为0。从1开始自左向右依次对水平方向的每格编号。</p>
<p>输入文件中同一行相邻两项之间用一个或多个空格隔开。</p>
<p>输出</p>
<p>输出文件的第一行给出了一个正整数，表示你的程序所收集的最大分数之和。</p>
<p>其后的每一行依时间顺序给出了游戏者每秒的决策。输出0表示原地不动、1或2表示向右移动一步或两步、-1 或-2表示向左移动一步或两步。输出应持续到游戏者收集完他要收集的最后一块馅饼为止。</p>
<p>样例输入</p>
<pre>3 3
0 1 2 5
0 2 1 3
1 2 1 3
1 3 1 4</pre>
<p>样例输出</p>
<pre>12
-1
1
1</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">围巾裁剪 </span></h2>
<p>裁缝有一块非常珍贵的丝绸围巾。可惜的是，围巾的某些部分已经被蛀虫给咬坏了。裁缝当然不愿意就这么把围巾给丢了，于是，他想把围巾给裁成两块小围巾送给他的两个女儿。自然，两块小围巾的面积之和越大越好。</p>
<p>这块围巾是一个正三角形，三条边被均匀地分成了N段，即这个正三角形被均匀地分成了N2个单元，每个单元是一个面积为1的正三角形。图一所 示为一个N=5的围巾，图中带阴影的单元表示被蛀虫咬坏的部分。从上往下看，围巾被分成了N行，第一行有1个单元，第二行有3个单元，其中有2个是形如D 的，有1个是形如Ñ 的（这两种三角形我们认为是形状相同的）。第三行有5个，其中有3个是形如D 的，有2个是形如Ñ 的…… 。用坐标（X,Y）给每个单元定位，第一行的单元的坐标为（1,1）；第二行从左到右的三个单元的坐标依次为（2,1）、（2,2）、（2,3）；…。</p>
<p><a class="image" title="Image:Scarfcut.jpg" href="http://www.ruvtex.cn/wiki/Image:Scarfcut.jpg"><img longdesc="/wiki/Image:Scarfcut.jpg" src="http://www.ruvtex.cn/mw/images/4/45/Scarfcut.jpg" alt="Image:Scarfcut.jpg" width="253" height="131" /></a></p>
<p>围巾的剪裁条件如下：</p>
<ol>
<li>裁成的两块小围巾形状与原来的大围巾完全相同，都是正三角形。</li>
<li>每一块小围巾里都不存在被蛀虫咬坏的部分。</li>
<li>裁剪时必须沿着单元的边界裁剪。</li>
<li>要求两块小围巾的面积的总和最大。</li>
</ol>
<p>图中，最优的裁剪方法已经用粗线画了出来，面积和为4+9=13。</p>
<p>现在需要你编一个程序来帮助裁缝解决这个问题。</p>
<p>输入</p>
<p>输入文件第一行为一个整数N（1&lt;=N&lt;=100），表示这块围巾总共被分成了N2个单元。第二行为一个整数M（0&lt;= M&lt;=N2-2），表示这块围巾共有M个单元被蛀虫咬坏了。接下的M行，每一行有两个正整数X和Y，为这M个被蛀虫咬坏的单元的坐标。</p>
<p>输入文件中同一行相邻两项之间用一个或多个空格隔开。</p>
<p>输出</p>
<p>输出文件仅含一个整数，为你所找到的裁出两块小围巾面积总和的最大值。</p>
<p>样例输入</p>
<pre>5
5
3 2
4 1
4 4
5 4
5 2</pre>
<p>样例输出</p>
<pre>13</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">SERNET模拟 </span></h2>
<p>计算机网络是现代科技发展的热点，传输性能是计算机网络的主要性能指标。SERKOI网络开发小组设计了一种称为SERNET的网络，并希望开发一个模拟软件来模拟该网络的数据传输情况，进而计算出网络的传输性能。</p>
<p>SERNET网络由服务器及连接它们的网络传输线路组成，服务器用服务器地址予以标识，网络传输线路为双向传输线路。网络传输过程中将各种 待传输数据分割为若干个大小相同的数据包，以数据包为单位进行传输。数据包在传输线路上传输时需要一定的传输时间，不同的传输线路的传输时间不同。服务器 处理数据的时间较之于传输时间很小，可忽略不计。每一个数据包中除了包括具体的数据信息外，还含有如下标识信息：</p>
<ul>
<li>数据包编号</li>
<li>数据包源服务器地址</li>
<li>数据包目的服务器地址</li>
</ul>
<p>网络传输的功能就是将一个个数据包从源服务器传输到目的服务器。对于每一个数据包，具体的网络传输方案为：</p>
<p>源服务器将待发送的数据包一律复制若干份并向与之相连的所有服务器发送该数据包。服务器接收到一个数据包后，如果该数据包符合下面任何一个条件：</p>
<ul>
<li>数据包的源服务器地址与本服务器地址相同</li>
<li>数据包的目的服务器地址与本服务器地址相同</li>
<li>本服务器已转发过与该数据包编号相同的数据包</li>
</ul>
<p>则接收该数据包；否则，服务器将其复制若干份并向与它相连的所有服务器转发该数据包。这里，两台服务器“相连”的含义指它们之间有网络传输线路直接相连。</p>
<p>现在需要你编一个程序来模拟SERNET网络中的数据包传输情况。</p>
<p>输入</p>
<p>输入文件的第一行为一个正整数N（N&lt;100），表示SERNET中服务器的数目。第二行有N个互不相等的不超过100的正整数，表 示每个服务器的地址。 第三行有一个正整数M，表示SERNET中传输线路的数目。接下来的M行每行用三个正整数表示一条传输线路连接的两台服务器的地址以及该传输线路的传输时 间。线路传输时间为不超过100的正整数。 接下来的一行为一个正整数K（K&lt;10000），表示SERNET中数据包的数目。以下的K行每行表示一个数据包的信息，格式为： 数据包编号 起始发送时间 源服务器地址 目的服务器地址</p>
<p>其中数据包编号为互不相同的小于100000的正整数。</p>
<p>输入文件的最后一行为一个正整数T（T&lt;10000），T为输出时刻。</p>
<p>输入文件中同一行相邻两项之间用一个或多个空格隔开。</p>
<p>输出</p>
<p>输出文件的第一行为一个整数P，表示T时刻后还在网络中传输的数据包数目（编号相同的数据包为同一数据包）。</p>
<p>约定</p>
<ul>
<li>本题中所有时间量的单位均相同；</li>
<li>每一条传输线路上在同一时刻能传输任意多个数据包。</li>
</ul>
<p>样例输入</p>
<pre>4
57 42 10 93
4
57 42 6
42 93 5
42 10 2
10 93 10
2
433 10 57 10
5678 11 42 93
23</pre>
<p>样例输出</p>
<pre>1</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">软件安装盘 </span></h2>
<p>软件安装通常是一件令人头疼的事。软件一般都包括若干个相对独立的部分（称为“组件”），在安装的时候由用户决定安装哪些部分。并且，这些相对独立的组件之间在安装时有一定的先后顺序要求。</p>
<p>由于当代的个人计算机普遍安装了软盘驱动器，所以软件的最流行的载体形式是软盘。然而，由于软盘的容量有限，稍大一些的软件就无法用一张软盘装下。这时，这些软件往往要用很多张软盘来存储。每张磁盘上存储了软件的一个或多个组件。这些软盘称为软件的安装盘。</p>
<p>由于软件的各个组件分散在不同的软盘上，而在安装时又有一定的先后顺序要求，所以很容易发生要求用户反复换盘的情况。而计算机用户在安装软 件的时候，最反感的就是反复在软盘之间切换：找盘、插盘、取盘、找盘、插盘、取盘、…，一切都显得那么琐碎和无序。因此，有必要对软件安装盘的制作提出下 述要求：</p>
<p>永远不要让用户将一张磁盘插入两次。更精确地，要求对安装盘从1开始顺序编号，使得安装的时候，用户只要按顺序插入磁盘即可。</p>
<p>出于经济的考虑，通常要求安装盘的总数最少。写一个程序，对于给定的软件，制定最优的安装盘方案。</p>
<p>输入</p>
<ul>
<li>输入文件的第一行是一个正整数M（1&lt;= M&lt;= 109），给出了每张磁盘的最大容量（字节数）。</li>
<li>输入文件的第二行是一个正整数N（1&lt;= N&lt;= 100），给出了软件的组件数。接下来的N行每行给出一个组件的详细信息。包括：</li>
</ul>
<ol>
<li>组件所占的字节数；</li>
<li>在安装该组件之前应先安装的组件序号（如有多个组件须先安装，则每个都应列出其序号，若无须先安装其它组件，则该行只含组件所占字节数）。</li>
</ol>
<ul>
<li>输入文件中同一行相邻两项之间用一个或多个空格隔开。</li>
</ul>
<p>输出</p>
<p>输出文件的第一行给出了最优安装盘方案的软盘数。如果不存在最优安装盘方案，则输出0。接下来的每一行顺序给出了每张盘上存储的组件的序号。如果一张盘上存储了多个组件，则输出所有这些组件的序号，中间用一个空格隔开。</p>
<p>样例输入</p>
<pre>1457664
3
512665
912345 1
832542 1</pre>
<p>样例输出</p>
<pre>2
1 2
3</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">并行计算</span></h2>
<p>运算器（ALU）是计算机中的重要部件，它的功能是进行数学运算。图一是运算器的工作简图，运算器的一次运算操作过程为：运算器在控制器的控制下， 从指定的存储器（MEMORY）存储单元中读出待运算的两个源操作数A和B，经过一定时间的计算后得到运算结果C，并将它写入指定的存储器存储单元中。</p>
<p><a class="image" title="Image:Parallel1.jpg" href="http://www.ruvtex.cn/wiki/Image:Parallel1.jpg"><img longdesc="/wiki/Image:Parallel1.jpg" src="http://www.ruvtex.cn/mw/images/5/56/Parallel1.jpg" alt="Image:Parallel1.jpg" width="384" height="173" /></a> 图一</p>
<p>运算器能完成的运算种类及所需时间如下表所示：</p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td>运算种类</td>
<td>运算操作</td>
<td>所需运算时间</td>
</tr>
<tr>
<td>1</td>
<td>C=A+B</td>
<td>Tadd</td>
</tr>
<tr>
<td>2</td>
<td>C=A-B</td>
<td>Tsub</td>
</tr>
<tr>
<td>3</td>
<td>C=A*B</td>
<td>Tmul</td>
</tr>
<tr>
<td>4</td>
<td>C=A/B</td>
<td>Tdiv</td>
</tr>
</tbody>
</table>
<p>在计算复杂的四则混合运算表达式时，运算器就变成了高速计算的“瓶颈”。为了得到更快的运算速度，计算机科学家们设计了一种有两个运算器的并行计算机，它的结构简图如图二所示。</p>
<p><a class="image" title="Image:Parallel2.jpg" href="http://www.ruvtex.cn/wiki/Image:Parallel2.jpg"><img longdesc="/wiki/Image:Parallel2.jpg" src="http://www.ruvtex.cn/mw/images/a/a9/Parallel2.jpg" alt="Image:Parallel2.jpg" width="443" height="240" /></a> 图二</p>
<p>由于两个运算器可以同时进行运算，因此大大提高了整机运算速度。该并行计算机有以下两种控制指令：</p>
<p>运算指令</p>
<ul>
<li>OP Time Alu_no Operate_no Address1 Address2 Address3</li>
</ul>
<p>其中OP为运算指令标识符，其后有六个参数：</p>
<ul>
<li>Time表示执行该指令的开始时间</li>
<li>Alu_no表示承担该次运算操作的运算器编号（Alu_no∈{1，2}）</li>
<li>Operate_no表示该次运算的运算种类（Operate_no∈{1，2，3，4}）</li>
<li>Address1,Address2表示待运算的两个源操作数的存储单元地址</li>
<li>Address3表示该次运算结束后存放运算结果的存储单元地址</li>
</ul>
<p>结束指令</p>
<ul>
<li>END Time Address</li>
</ul>
<p>其中 END为结束指令标识符，其后有两个参数：</p>
<ul>
<li>Time表示整个控制程序的结束时间</li>
<li>Address表示存放最终计算结果的存储单元地址</li>
</ul>
<p>每个运算器同一时刻可以执行一条运算指令，结束指令表示控制程序结束。</p>
<p>现在需要你编一个程序，对给定的待计算的表达式，自动生成一段控制程序，使图二所示的并行计算机能够正确计算该表达式的值，并使总运算时间尽量小。</p>
<p>输入</p>
<p>输入文件的第一行为四个不超过1000的正整数，依次为Tadd、Tsub、Tmul和Tdiv。 输入文件的第二行为待计算的四则混合运算表达式（长度不超过255个字符），表达式中的变量用大写英文字母表示，各变量的初始值依照变量的字母顺序依次存 放在地址为1,2,…的存储单元中。</p>
<p>输入文件中同一行相邻两项之间用一个或多个空格隔开。</p>
<p>输出</p>
<p>输出文件为完成该表达式计算的最优控制指令段。指令根据其开始执行时间先后依次输出（对于开始执行时间相同的两条指令，输出先后次序不限），每条指令占一行。输出文件中同一行相邻两项之间用一个空格隔开。</p>
<p>约定</p>
<ul>
<li>控制程序初始执行时间从0时刻开始。</li>
<li>问题中所涉及的各种时间量的单位相同。</li>
<li>存储器的存储单元最多有1K个。</li>
<li>由于数据读写时间同运算时间相比较小，可忽略不计。</li>
<li>如果两个运算器同时对同一个存储单元进行操作，则运算器1先操作，运算器2后操作</li>
</ul>
<p>评分</p>
<ul>
<li>程序的得分将取决于其所能找到的最优解与标准最优解相比较的优劣程度。</li>
</ul>
<p>样例输入</p>
<pre>2 2 4 12
C+(A+B)*C-E/F+F</pre>
<p>样例输出</p>
<pre>OP 0 1 1 1 2 6
OP 0 2 4 4 5 8
OP 2 1 1 3 5 7
OP 4 1 3 6 3 10
OP 8 1 1 10 7 11
OP 12 1 2 11 8 12
END 14 12</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2000-solution/" title="NOI 2000 解题报告">NOI 2000 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1999-solution/" title="NOI 1999 解题报告">NOI 1999 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2001-solution/" title="NOI 2001 解题报告">NOI 2001 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-2000-nar/" title="POI 2000 Skiers 滑雪队">POI 2000 Skiers 滑雪队</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-gon/" title="POI 1998 追赶 Chase">POI 1998 追赶 Chase</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-1998-solution/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>POI 1998 相交的矩形 Rectangles</title>
		<link>http://www.byvoid.com/blog/poi-1998-pro/</link>
		<comments>http://www.byvoid.com/blog/poi-1998-pro/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 11:15:36 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1998]]></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=634</guid>
		<description><![CDATA[很明显，这个题是求连通块的个数。关键在于正确判断两个矩形相交。 我们知道，在一维的数轴上，两个区间[a,b] [c,d] (a&#60;=b)，这两个区间相交的充分必要条件是c&#60;=b。对于题中所述的边平... ]]></description>
			<content:encoded><![CDATA[<p>很明显，这个题是求连通块的个数。关键在于正确判断两个矩形相交。</p>
<p>我们知道，在一维的数轴上，两个区间[a,b] [c,d] (a&lt;=b)，这两个区间相交的充分必要条件是c&lt;=b。对于题中所述的边平行于坐标轴的矩形，我们需要分别判断x轴方向和y轴方向都相交，那么这个矩形一定相交。</p>
<p>假设我们对于给定的两个矩形A，B，A矩形的左下点坐标为(A.x1,A.y1)，右上点坐标(A.x2,A.y2)，同理B点，判断这两个矩形相交，要分为以下四种情况</p>
<ul>
<li>情况1：A在B左下 (A.x1 &lt;= B.x1 且 A.y1 &lt;= B.y1)
<ul>
<li>该情况下两个矩形相交的条件是 (B.x1&lt;=A.x2 且 B.y1&lt;=A.y2)</li>
</ul>
</li>
</ul>
<ul>
<li>情况2：A在B左上 (A.x1 &lt;= B.x1 且 A.y1 &gt;= B.y1)
<ul>
<li>该情况下两个矩形相交的条件是 (B.x1&lt;=A.x2 且 A.y1&lt;=B.y2)</li>
</ul>
</li>
</ul>
<ul>
<li>情况3：A在B右下 (A.x1 &gt;= B.x1 且 A.y1 &lt;= B.y1)
<ul>
<li>该情况下两个矩形相交的条件是 (A.x1&lt;=B.x2 且 B.y1&lt;=A.y2)</li>
</ul>
</li>
</ul>
<ul>
<li>情况4：A在B左上 (A.x1 &gt;= B.x1 且 A.y1 &gt;= B.y1)
<ul>
<li>该情况下两个矩形相交的条件是 (A.x1&lt;=B.x2 且 A.y1&lt;=B.y2)</li>
</ul>
</li>
</ul>
<p>根据以上四种情况分类讨论，可以判断A和B是否相交。但是以上方法会造成一个遗漏，就是按题意如果两个矩形只有一个公共点，不能算作相交。对于这种特殊判断，需要排除只有一个交点的状态。</p>
<ul>
<li>情况1：A在B左下 (A.x1 &lt;= B.x1 且 A.y1 &lt;= B.y1)
<ul>
<li>该情况下要排除(A.x2==B.x1 且 A.y2==B.y1)的状态</li>
</ul>
</li>
</ul>
<ul>
<li>情况2：A在B左上 (A.x1 &lt;= B.x1 且 A.y1 &gt;= B.y1)
<ul>
<li>该情况下要排除(A.x2==B.x1 且 A.y1==B.y2)的状态</li>
</ul>
</li>
</ul>
<ul>
<li>情况3：A在B右下 (A.x1 &gt;= B.x1 且 A.y1 &lt;= B.y1)
<ul>
<li>该情况下要排除(A.x1==B.x2 且 A.y2==B.y1)的状态</li>
</ul>
</li>
</ul>
<ul>
<li>情况4：A在B左上 (A.x1 &gt;= B.x1 且 A.y1 &gt;= B.y1)
<ul>
<li>该情况下要排除(A.x1==B.x2 且 A.y1==B.y2)的状态</li>
</ul>
</li>
</ul>
<p>根据以上方法，我们就可以判断每对矩形是否相交了。接下来要求出所有的连通块，由于N多达7000，一般的O(N^2)的广搜会超时，需要用并查集求连通块。</p>
<p>初始时把每个矩形作为单独的一个集合，如果两个矩形相交，合并这两个矩形所属的集合，最后统计剩余的集合数，就是连通块的个数。这样时间复杂度虽然还近似是O(N^2)，但是会减少搜索时许多无用的操作，所以可以解决问题。</p>
<p><span id="more-634"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p634code14'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63414"><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
</pre></td><td class="code" id="p634code14"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI1998 pro
 * Author: Guo Jiabao
 * Time: 2008.12.6 18:05:22
 * State: Solved 
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">7001</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tUFS
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> size<span style="color: #008080;">;</span>
		tUFS<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> sz<span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> size<span style="color: #008000;">&#40;</span>sz<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>sz<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>i<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> findroot<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">int</span> r,t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>r<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>F<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>r<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>a<span style="color: #000080;">=</span>t<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				t<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> getroot<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span>F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> Union<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>findroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">bool</span> judge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">return</span> F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><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: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> rect
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x1,y1,x2,y2<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,Ans<span style="color: #008080;">;</span>
rect R<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> H<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
tUFS <span style="color: #000040;">*</span>U<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pro.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;pro.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x1</span>,<span style="color: #000040;">&amp;</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y1</span>,<span style="color: #000040;">&amp;</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x2</span>,<span style="color: #000040;">&amp;</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	U<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tUFS<span style="color: #008000;">&#40;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> across<span style="color: #008000;">&#40;</span>rect <span style="color: #000040;">&amp;</span>A,rect <span style="color: #000040;">&amp;</span>B<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span> <span style="color: #000080;">&lt;=</span> B.<span style="color: #007788;">x1</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">// left</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">y1</span> <span style="color: #000080;">&lt;=</span> B.<span style="color: #007788;">y1</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">// down</span>
			<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>B.<span style="color: #007788;">x1</span><span style="color: #000080;">&lt;=</span>A.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">y1</span><span style="color: #000080;">&lt;=</span>A.<span style="color: #007788;">y2</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x2</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">x1</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y2</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">y1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>B.<span style="color: #007788;">x1</span><span style="color: #000080;">&lt;=</span>A.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y1</span><span style="color: #000080;">&lt;=</span>B.<span style="color: #007788;">y2</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x2</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">x1</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y1</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">y2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">y1</span> <span style="color: #000080;">&lt;=</span> B.<span style="color: #007788;">y1</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span><span style="color: #000080;">&lt;=</span>B.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">y1</span><span style="color: #000080;">&lt;=</span>A.<span style="color: #007788;">y2</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y2</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">y1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span><span style="color: #000080;">&lt;=</span>B.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y1</span><span style="color: #000080;">&lt;=</span>B.<span style="color: #007788;">y2</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y1</span><span style="color: #000080;">==</span>B.<span style="color: #007788;">y2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>across<span style="color: #008000;">&#40;</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,R<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>U<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>judge<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
					U<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Union<span style="color: #008000;">&#40;</span>i,j<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>
		H<span style="color: #008000;">&#91;</span>U<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>getroot<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">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>H<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			Ans<span style="color: #000040;">++</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;%d&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">相交的矩形 </span></h2>
<p>在一个平面上画了n个矩形。每一个矩形有平行于坐标轴的边和整数的顶点坐标。 我们定义一个如下的块：</p>
<ol>
<li>每一个矩形是一个块，</li>
<li>如果两个不同的块有一个公共段那么它们组成一个新的块，否则我们说这些块是独立的。</li>
</ol>
<p>图1的矩形组成了两个独立的块。</p>
<p><a class="image" title="Image:Poi pro 1.gif" href="http://www.ruvtex.cn/wiki/Image:Poi_pro_1.gif"><img longdesc="/wiki/Image:Poi_pro_1.gif" src="http://www.ruvtex.cn/mw/images/0/00/Poi_pro_1.gif" alt="Image:Poi pro 1.gif" width="134" height="148" /></a></p>
<p>图2的矩形组成了一个块。</p>
<p><a class="image" title="Image:Poi pro 2.gif" href="http://www.ruvtex.cn/wiki/Image:Poi_pro_2.gif"><img longdesc="/wiki/Image:Poi_pro_2.gif" src="http://www.ruvtex.cn/mw/images/0/05/Poi_pro_2.gif" alt="Image:Poi pro 2.gif" width="134" height="149" /></a></p>
<p>任务</p>
<p>写一个程序:</p>
<ol>
<li>从文件中读取矩形数和它们顶点的坐标；</li>
<li>找出各个由矩形组成的独立块的数目；</li>
<li>把结果写到文件中。</li>
</ol>
<p>输入</p>
<p>在输入文件的首行有一个整数n（1 &lt;= n &lt;=7000），它是矩形数。在接下来的n行里有矩形的坐标，每一个矩形被四个数描述：左下角顶点的坐标x,y和右上角顶点坐标。所有这些坐标都是不大于10000的非零整数。</p>
<p>输出</p>
<p>在文件的首行应该写下一个整数-被所给矩形形成的独立块的数量。</p>
<p>样例输入</p>
<pre>9
0 3 2 6
4 5 5 7
4 2 6 4
2 0 3 2
5 3 6 4
3 2 5 3
1 4 4 7
0 0 1 4
0 0 4 1</pre>
<p>样例输出</p>
<pre>2</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-1998-row/" title="POI 1998 单词等式 Word equations ">POI 1998 单词等式 Word equations </a></li><li><a href="http://www.byvoid.com/blog/poi-1999-pie/" title="POI 1999 遗传密码 Primitivus">POI 1999 遗传密码 Primitivus</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-okn/" title="POI 1998 窗户 Window">POI 1998 窗户 Window</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-naj/" title="POI 1998 最轻的语言 The lightest language">POI 1998 最轻的语言 The lightest language</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-gon/" title="POI 1998 追赶 Chase">POI 1998 追赶 Chase</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1998-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POI 1998 窗户 Window</title>
		<link>http://www.byvoid.com/blog/poi-1998-okn/</link>
		<comments>http://www.byvoid.com/blog/poi-1998-okn/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 11:32:05 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1998]]></category>
		<category><![CDATA[并查集]]></category>
		<category><![CDATA[连通块]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=629</guid>
		<description><![CDATA[求连通块，由于数据范围过大，需要离散化，把10000压缩成2500。然后在指定区域内求出连通块的个数，BFS会有一点超时，需要用并查集优化。 ?View Code CPP1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21... ]]></description>
			<content:encoded><![CDATA[<p>求连通块，由于数据范围过大，需要离散化，把10000压缩成2500。然后在指定区域内求出连通块的个数，BFS会有一点超时，需要用并查集优化。</p>
<p><span id="more-629"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p629code16'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p62916"><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
</pre></td><td class="code" id="p629code16"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x,y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> cell
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> bel<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> p<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tList
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		tList <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
		point v<span style="color: #008080;">;</span>
		tList<span style="color: #008000;">&#40;</span>point tv<span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> v<span style="color: #008000;">&#40;</span>tv<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			next<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tQueue
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		tList <span style="color: #000040;">*</span>first,<span style="color: #000040;">*</span>last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> size<span style="color: #008080;">;</span>
		tQueue<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			first<span style="color: #000080;">=</span>last<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			size<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> ins<span style="color: #008000;">&#40;</span>point v<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>first<span style="color: #008000;">&#41;</span>
				last<span style="color: #000080;">=</span>last<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tList<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				first<span style="color: #000080;">=</span>last<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tList<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		point pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			point rtn<span style="color: #000080;">=</span>first<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
			tList <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>first<span style="color: #008080;">;</span>
			size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			first<span style="color: #000080;">=</span>first<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
			<span style="color: #0000dd;">delete</span> t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> rtn<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">5005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAX<span style="color: #000080;">=</span><span style="color: #0000dd;">2601</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> dx<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> dy<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
point w1,w2<span style="color: #008080;">;</span>
point P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
point <span style="color: #000040;">*</span>pP<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
cell G<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> M,M_X,M_Y,C,R,minx,miny,maxx,maxy,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> Red<span style="color: #008080;">;</span>
tQueue Q<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,t<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;okn.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;okn.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>w1.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>w1.<span style="color: #007788;">y</span>,<span style="color: #000040;">&amp;</span>w2.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>w2.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	t<span style="color: #000080;">=</span>w1.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>w1.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>w2.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>w2.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>t<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>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #008000;">&#125;</span>
	pP<span style="color: #008000;">&#91;</span>M<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>w1<span style="color: #008080;">;</span>
	pP<span style="color: #008000;">&#91;</span>M<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>w2<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> cmp1 <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> cmp2 <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> disper<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,last<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,k<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>pP<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,M<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>pP<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp1<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>M<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000080;">&gt;</span> last<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			last<span style="color: #000080;">=</span>pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008080;">;</span>
			M_X<span style="color: #000080;">=</span><span style="color: #000040;">++</span>k<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	last<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,k<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>pP<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,M<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>pP<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</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><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y <span style="color: #000080;">&gt;</span> last<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			last<span style="color: #000080;">=</span>pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #008080;">;</span>
			M_Y<span style="color: #000080;">=</span><span style="color: #000040;">++</span>k<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		pP<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> draw<span style="color: #008000;">&#40;</span>point a,point b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">y</span><span style="color: #000080;">==</span>b.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		j<span style="color: #000080;">=</span>a.<span style="color: #007788;">y</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b.<span style="color: #007788;">x</span><span style="color: #000080;">&gt;</span>a.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>a.<span style="color: #007788;">x</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>b.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">&lt;=</span>M_Y<span style="color: #008000;">&#41;</span>
					G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
					G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><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: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>b.<span style="color: #007788;">x</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>a.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">&lt;=</span>M_Y<span style="color: #008000;">&#41;</span>
					G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
					G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><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: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>a.<span style="color: #007788;">x</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b.<span style="color: #007788;">y</span><span style="color: #000080;">&gt;</span>a.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>a.<span style="color: #007788;">y</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>b.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&lt;=</span>M_X<span style="color: #008000;">&#41;</span>
					G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
					G<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>b.<span style="color: #007788;">y</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>a.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&lt;=</span>M_X<span style="color: #008000;">&#41;</span>
					G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
					G<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: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> graph<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		draw<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	draw<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>M<span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> inrange<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> x<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #000080;">&lt;=</span>M_X <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&lt;=</span>M_Y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> inwindow<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> x<span style="color: #000080;">&gt;=</span>minx <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #000080;">&lt;=</span>maxx <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&gt;=</span>miny <span style="color: #000040;">&amp;&amp;</span> y<span style="color: #000080;">&lt;=</span>maxy<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> fill<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> tx,<span style="color: #0000ff;">int</span> ty<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> k<span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">reset</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	i.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>tx<span style="color: #008080;">;</span>i.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>ty<span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>Q.<span style="color: #007788;">pop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		G<span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">=</span>C<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>G<span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				j.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>dx<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				j.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">y</span><span style="color: #000040;">+</span>dy<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>inrange<span style="color: #008000;">&#40;</span>j.<span style="color: #007788;">x</span>,j.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>G<span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						G<span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">=</span>C<span style="color: #008080;">;</span>
						Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
				<span style="color: #008000;">&#125;</span>
				<span style="color: #0000ff;">else</span>
				<span style="color: #008000;">&#123;</span>
					Red<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<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> getred<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	C<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M_X<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M_Y<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				C<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				Red<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				fill<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Red<span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					R<span style="color: #000080;">=</span>C<span style="color: #008080;">;</span>
					<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> fill2<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> tx,<span style="color: #0000ff;">int</span> ty<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> k<span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">reset</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	i.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>tx<span style="color: #008080;">;</span>i.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>ty<span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>Q.<span style="color: #007788;">pop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		G<span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>G<span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				j.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>dx<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				j.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">y</span><span style="color: #000040;">+</span>dy<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>inwindow<span style="color: #008000;">&#40;</span>j.<span style="color: #007788;">x</span>,j.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>G<span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">==</span>R<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						G<span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
						Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #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: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	Ans<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	minx<span style="color: #000080;">=</span>w1.<span style="color: #007788;">x</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> maxx<span style="color: #000080;">=</span>w2.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
	miny<span style="color: #000080;">=</span>w1.<span style="color: #007788;">y</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> maxy<span style="color: #000080;">=</span>w2.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>minx<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>maxx<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>miny<span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>maxy<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">bel</span><span style="color: #000080;">==</span>R<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				Ans<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				fill2<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&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>
	disper<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	graph<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	getred<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote><h2><span class="mw-headline">窗户 </span></h2>
<p>我们在笛卡尔坐标系中有一个多边形，多边形的边平行于坐标轴，每两条相邻的边是垂直正交的并且每一个顶点的坐标都是整数。我们还给出一个边也平行于坐标轴的矩形窗户。多边形的内部被涂成红色，那么有几个分开的红色部分将在窗户中被看到。</p>
<p>例子：</p>
<p>如下图：</p>
<p><a class="image" title="Image:Okn.png" href="http://www.ruvtex.cn/wiki/Image:Okn.png"><img longdesc="/wiki/Image:Okn.png" src="http://www.ruvtex.cn/mw/images/7/71/Okn.png" alt="Image:Okn.png" width="273" height="300" /></a></p>
<p>有两个红色的部分将被通过窗子看到。</p>
<p>任务：</p>
<p>写一个程序</p>
<ul>
<li>从文件中读入窗户与多边形的描述。</li>
<li>计算能通过窗户看到的分开的红色部分的个数。</li>
<li>将结果写入文件。</li>
</ul>
<p>输入：</p>
<p>在文件的第一行有四个整数x1,y1,x2,y2 (0&lt;=x1,y1,x2,y2&lt;=10000),有一个空格隔开，（x1,y1）是窗户左上角的坐标，（x2,y2）是窗户右下角的坐标。 下一行有一个整数n（4&lt;=n&lt;=5000）表示多边形的顶点数。以下n行以逆时针的顺序给出了多边形的顶点坐标，也就是说当我们沿着给出的 多边形的边走时，多边形的内部在外部的左边。每一行包括两个整数x y(0&lt;=x,y&lt;=10000),有一个空格隔开，第(i+2)行表示多边形的第i个顶点。</p>
<p>输出：</p>
<p>在文件的第一行有且仅有一个整数表示能够通过窗户看到的分开的红色区域的个数。</p>
<p>输入样例：</p>
<pre>0 5 8 1
24
0 0
4 0
4 2
5 2
5 0
7 0
7 3
3 3
3 2
2 2
2 4
1 4
1 5
2 5
2 6
3 6
3 5
4 5
4 6
5 6
5 4
7 4
7 7
0 7</pre>
<p>输出样例：</p>
<pre>2</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-1998-pro/" title="POI 1998 相交的矩形 Rectangles">POI 1998 相交的矩形 Rectangles</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-row/" title="POI 1998 单词等式 Word equations ">POI 1998 单词等式 Word equations </a></li><li><a href="http://www.byvoid.com/blog/poi-1999-pie/" title="POI 1999 遗传密码 Primitivus">POI 1999 遗传密码 Primitivus</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-naj/" title="POI 1998 最轻的语言 The lightest language">POI 1998 最轻的语言 The lightest language</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-gon/" title="POI 1998 追赶 Chase">POI 1998 追赶 Chase</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-ple/" title="POI 1998 潜水员的问题 Frogman">POI 1998 潜水员的问题 Frogman</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1998-okn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POI 1998 最轻的语言 The lightest language</title>
		<link>http://www.byvoid.com/blog/poi-1998-naj/</link>
		<comments>http://www.byvoid.com/blog/poi-1998-naj/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 03:42:41 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1998]]></category>
		<category><![CDATA[Treap]]></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=627</guid>
		<description><![CDATA[从描述中看出，非前缀且权值和最小，于是我想到了哈夫曼编码。类似的，对于这道题，我们可以考虑建立一个k叉树，这个树的每个叶节点代表一个字符串，只须找出最小的n个叶节点的权值，... ]]></description>
			<content:encoded><![CDATA[<p>从描述中看出，非前缀且权值和最小，于是我想到了哈夫曼编码。类似的，对于这道题，我们可以考虑建立一个k叉树，这个树的每个叶节点代表一个字符串，只须找出最小的n个叶节点的权值，就是结果。</p>
<p>首先建立一个0节点，在此基础上首先加入每个单个字母，当叶节点的个数不足n个时，取出最小的一个节点，对这个节点进行扩展，即把它的权值分别加上每个字母的权值，作为新的k个叶节点。否则把前n小的节点取出，计算它们的权值之和。如果这个和小于当前已知最优解，更新最优解，否则结束，因为再扩展一定不会比当前值小。</p>
<p>实际上我们并不需要建立树结构，只需要对叶节点的权值抽象的维护。首先把每个字母的权值插入优先队列，每次取出前n小的值计算，并以最小值来维护。</p>
<p>一般情况下我们用最小堆实现优先队列，但是堆中可能会存在n^2个元素，大大超过了空间限制。但是优先队列中只有前n小的元素是对我们有用的，我们可以以此改进堆，只存储前n小的元素。当插入一个新的元素时，把堆中的最大值删除，这样维护的一定是前n小的。这样又会带来新的问题，在最小堆中取最大值是O(n)时间复杂度的。于是必须同时维护一个最大堆，使取删最大值变为O(logn)。需要同时维护两个堆，在每个元素之间建立映射关系，每次删除都要对两个堆进行维护。</p>
<p>这样虽然可以解决问题，但是会大大增加编程的复杂度，可以考虑不用堆来维护。我用了更强大的数据结构，平衡树。平衡树在插入、取最大、取最小、删除上均有O(logn)的时间复杂度，使用平衡树可以使编程思路更清晰。我用的是Treap。</p>
<p>以下是我用Treap实现的代码。</p>
<p><span id="more-627"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code18'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p62718"><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
</pre></td><td class="code" id="p627code18"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI1998 naj
 * Author: Guo Jiabao
 * Time: 2008.12.3 20:03:22
 * State: Solved 
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tTreap
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">class</span> tNode
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
				<span style="color: #0000ff;">int</span> v,fix<span style="color: #008080;">;</span>
				tNode <span style="color: #000040;">*</span>l,<span style="color: #000040;">*</span>r<span style="color: #008080;">;</span>
				tNode<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> tv,tNode <span style="color: #000040;">*</span>nl<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span> v<span style="color: #008000;">&#40;</span>tv<span style="color: #008000;">&#41;</span>,l<span style="color: #008000;">&#40;</span>nl<span style="color: #008000;">&#41;</span>,r<span style="color: #008000;">&#40;</span>nl<span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					fix<span style="color: #000080;">=</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
		tNode <span style="color: #000040;">*</span>root,<span style="color: #000040;">*</span>null<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> sum,size,lim<span style="color: #008080;">;</span>
		tTreap<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			root<span style="color: #000080;">=</span>null<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tNode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			sum<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> rot_r<span style="color: #008000;">&#40;</span>tNode <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			tNode <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #008080;">;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #008080;">;</span>
			q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
			p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> rot_l<span style="color: #008000;">&#40;</span>tNode <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			tNode <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #008080;">;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #008080;">;</span>
			q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
			p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> _ins<span style="color: #008000;">&#40;</span>tNode <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>null<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				p<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tNode<span style="color: #008000;">&#40;</span>v,null<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v <span style="color: #000080;">&lt;=</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				_ins<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
					rot_r<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				_ins<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
					rot_l<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> ins<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			_ins<span style="color: #008000;">&#40;</span>root,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>size<span style="color: #000080;">&gt;</span>lim<span style="color: #008000;">&#41;</span>
				delmax<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> _delmin<span style="color: #008000;">&#40;</span>tNode <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #000080;">==</span>null<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">int</span> v<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
				tNode <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
				p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #008080;">;</span>
				<span style="color: #0000dd;">delete</span> t<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">return</span> v<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">return</span> _delmin<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> _delmax<span style="color: #008000;">&#40;</span>tNode <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #000080;">==</span>null<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">int</span> v<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
				tNode <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
				p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>l<span style="color: #008080;">;</span>
				<span style="color: #0000dd;">delete</span> t<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">return</span> v<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">return</span> _delmax<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>r<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> delmin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span>_delmin<span style="color: #008000;">&#40;</span>root<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			sum<span style="color: #000040;">-</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> delmax<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span>_delmax<span style="color: #008000;">&#40;</span>root<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			sum<span style="color: #000040;">-</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXK<span style="color: #000080;">=</span><span style="color: #0000dd;">30</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
&nbsp;
tTreap T<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> W<span style="color: #008000;">&#91;</span>MAXK<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,K,Ans<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;naj.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;naj.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>K<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	T.<span style="color: #007788;">lim</span><span style="color: #000080;">=</span>N<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>K<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>W<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		T.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>W<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Ans<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,A<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>T.<span style="color: #007788;">sum</span><span style="color: #000080;">&lt;</span>Ans<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>T.<span style="color: #007788;">size</span><span style="color: #000080;">&gt;=</span>N<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>T.<span style="color: #007788;">sum</span><span style="color: #000080;">&lt;</span>Ans<span style="color: #008000;">&#41;</span>
				Ans<span style="color: #000080;">=</span>T.<span style="color: #007788;">sum</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		A<span style="color: #000080;">=</span>T.<span style="color: #007788;">delmin</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>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>K<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			T.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>A<span style="color: #000040;">+</span>W<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<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> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote><h2><span class="mw-headline">最轻的语言</span></h2>
<p>字母表AK由英文字母表的大写字母K组成。一个被称作重量的正整数被委派给字母表的每一个字母。一个由字母表AK的字母组成的字符串的重量是这个字 符串的所有字母的总重量。一个基于字母表AK的语言由这个字母表的字母组成的字符串的有限集合。一个语言的重量是所有它的字符串的重量之和。如果这个语言 的任意两个字符串W、V，W不是V的前缀，那我们说这个语言不是前缀的。</p>
<p>我们想找出基于字母表AK的N个要素的非前缀语言的可能的最小重量。</p>
<p>例如</p>
<p>假设K=2，字母a的重量W（a）=2 字母b的重量W（b）=5。字符串ab的重量W（ab）=2+5=7。 W（aba）=2+5+2=9。语言J={ab，aba，b}的重量-W（J）=21。语言J不是非前缀，因为字符串ab是aba的前缀。基于字母表A2最轻的三元非前缀语言（假设字母的重量如前）是{b，aa，ab}；它的重量是16。</p>
<p>任务</p>
<p>写一个程序：</p>
<ul>
<li>从文本文件中读取两个整数n，k和字母表Ak 的k个字母的重量；</li>
<li>计算基于字母表Ak 的非前缀的n元语言的最小重量；</li>
<li>把结果写到文本文件。</li>
</ul>
<p>输入</p>
<p>在输入文件的首行有两个被空格号分开的正整数n、k(2&lt;=n&lt;=10000, 2&lt;=k&lt;=26)。它们是语言中的字符串数和字母表中各个字母数。第二行包括被空格号隔开的k个正整数。每一个都不大于10000。第I个数是第I个字母的重量。</p>
<p>输出</p>
<p>在输出文件的首行应该写一个整数-基于字母表Ak 的最轻的非前缀的n元语言重量。</p>
<p>样例输入</p>
<pre>3 2
2 5</pre>
<p>样例输出</p>
<pre>16</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-2000-pro/" title="POI 2000 Promotion 促销活动">POI 2000 Promotion 促销活动</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-kop/" title="POI 2001 Glodmine 金矿">POI 2001 Glodmine 金矿</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-mro/" title="POI 2001 Ants and the ladybug 蚂蚁和瓢虫">POI 2001 Ants and the ladybug 蚂蚁和瓢虫</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-wod/" title="POI 1999 积水 Water">POI 1999 积水 Water</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-pro/" title="POI 1998 相交的矩形 Rectangles">POI 1998 相交的矩形 Rectangles</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-okn/" title="POI 1998 窗户 Window">POI 1998 窗户 Window</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1998-naj/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
