<?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>momodi&#039;s blog</title>
	<atom:link href="http://gaoyunxiang.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://gaoyunxiang.com</link>
	<description>My technology blog</description>
	<lastBuildDate>Wed, 12 May 2010 01:24:56 +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>浙江理工大学邀请赛流水帐 by momodi@OpenLegend</title>
		<link>http://gaoyunxiang.com/?p=113</link>
		<comments>http://gaoyunxiang.com/?p=113#comments</comments>
		<pubDate>Wed, 12 May 2010 01:24:26 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Imemory]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[浙江理工大学邀请赛]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=113</guid>
		<description><![CDATA[Open是武大长期流传下来的人文精神，也是我们集训队一直的宝贵财富。因此我们在Legend的基础上取名OpenLegend，作为本次比赛的队名。 比赛前一天： 本来是想周六中午BG大家的，结果发现了浙江理工在下沙之后就知道中午来不及BG了，所以改到晚上。晚上的湘菜馆还是挺不错的，虽然我感觉不够辣。。吃饭的时候看大家的状态都不错，都挺Happy的。 周六下午热身赛的时候，Dumbear问了我一句：“我们的比赛策略是什么？” 听到这个问题之后，我顿时感觉大脑空白了几秒。 思索了良久这个问题的答案，回想起了以前在ChaeYeon队伍的时候制定的种种策略，比如赛前要制定表格，说好每个人的读题顺序，想好卡题了怎么办，碰到什么类型的题目让谁做，谁负责主要读题，谁负责帮队友debug等等等等。 在回想完这种种之后，不知道为什么感觉这些策略都不值得提出来，于是跟Dumbear说:“到时候看情况，该怎么样就怎么样吧。” 不过虽然没有继续讨论“策略”这个问题，我仍然在那里静静的思考了良久，或许真正的策略便跟武侠里面一样“重剑无锋，无招胜有招”。 周日上午九点，比赛正式开始了： 简单题H和A： Dumbear和ISea开始读题。这时候我把每一个题目都扫描了一下。为什么要这么做呢？ 这还需要从出题说起，自从去年开始大量出题之后，自我感觉上我对比赛的一些细节问题有了一些很新的认识。比如：一般来说这种强度的邀请赛都会有一个sb题来保证每一个队伍都至少AC一道题。而这种SB题是字符串处理的概率很大，因为字符串处理题好出-.- 在寻找了一圈样例里面有字符串的题目之后，我选中了H，运气挺好的，H确实是一个足够简单的题目。 我在上机的时候Dumbear还问了我H是什么类型的，本想解释一番的我想到Dumbear可能是怕这个题目不够简单，怕我太急了。所以我随口回复了“H是A+B类型的题目。” AC了H之后Dumbear上来AC了A题。这时候差不多是9点30分，也就是说比赛经过了半个小时了。我猜想接下来的题目应该就没有A和H那么简单了，没想到的是剩下的题目难度也都不大。唯一的压轴难题确是我们几乎没有可能做出来的题。 计算几何D题： 我在写H题的时候就听Dumbear和ISea在讨论有一个简单的计算几何，DumbearAC了A之后我便上机开始敲这道几何题（D题）。计算几何写完之后有个小插曲，就是不知道为什么有一个泛型的函数编译通过不了。在询问了ISea和Dumbear之后，他俩也表示不知道。于是我果断停止在这里纠结，换了一种写法。编译通过并且过了样例之后，我又盯着代码看了一会，继续回想了一下是不是有特殊情况。这时候ISea问怎么样了，我答：“可以交了”。Dumbear附和了一句“交吧，感觉momo这题写的挺仔细，应该没问题。”听到这句话我小小的惊讶了一下，为什么Dumbear会知道我写的很仔细呢？ D题1Y。 状态压缩DP题 B和数据结构题F： ISea很早就说了B是一个简单题，不过因为题目里面要牵扯到棒球的规则，所以ISea在跟我讲这个题目意思和做法的时候，我只是听了一个大概。不过我还是挺相信ISea的，所以我也就没有追求这个题目的细节，跟ISea表示了一下问题不大后，ISea也是直接去写了。 而后Dumbear跟我讲了讲F题题意以及RMQ的做法。我知道题意之后发现此题就是求一个数列中每一个数的左右两边边比他大的第一个数。这个问题的解法我很早就知道了，代码也很短，所以先把ISea从机器上拉了下来，换我上去AC了这道题。 而后ISea也1Y了状态压缩的B题。 乱搞题I： 接下来ISea和Dumbear讨论了一下I题后发现了其“简单题”的本质，不过这中间有一点点冲突：ISea有一个优美的方法，而Dumbear想直接去暴力模拟。最后Dumbear去用ISea的优美方法写的，可惜的是WA了两次也还没有AC。这时候Dumbear和ISea又再次重新读题，在确保了题意理解无误的情况下，Dumbear没办法换了他原来准备的暴力模拟的方法AC了I题。回想此题，最好的情况应该是Dumbear一开始就写最保险的暴力模拟方法。不过在出问题之后Dumbear能够顶住压力重写代码，还是很赞的。 图论+树形DP题E： E题样例里面输出的是小数，也就是说E题是两种题目可能性最大：几何题或者概率题。这两种不同类型的题目对我来说完全就是两个极端，每次碰上样例输出小数的题目我都是爱恨交加。 我在读完题之后，悲剧的发现是概率题。 在I题的解决过程中，我仔细的研究了一下E题，发现与概率关系不大，在跑完最短路之后只要两边BFS就可以了。不过因为场上还没有提交这个题目，所以我们也并没有急于去写这个题目。后来在跟Dumbear讲解这个题目的题意和做法的同时，我更加确信这个题目的做法没错。所以做法也没有讲完，我就直接上机去写这个题目了。 写完之后WA了一遍，不过我马上意识到了错误的地方（图有可能不联通），因为这个地方在我刚开始写的时候考虑到了，中间因为I题被打断了一次，竟然所以把这个Trick给忘记了。改过之后E题2Y。 需要转弯的矩阵乘法题G： 在Dumbear写I题的时候，我和ISea一直在思索G题的做法，可惜一直没有找到正确的方向。后来经Dumbear提醒才恍然大悟，原来可以改成递推式用矩阵乘法解决。ISea去写了G。因为还有很长时间去写这个题目，所以我们有足够的信心G题肯定能AC。J题AC之后就是剩下最后一题J了。 压轴题J： 此题是浙江省赛的一个变形，这个题对我们来说是一个很大的悲剧，因为浙江省赛的时候是我们校赛决赛的练习赛，Dumbear和ISea是在参赛，我是在出题，所以没有一个人在当时对这个题有细细的研究。不过因为知道这个题目是一个难题，所以我们前期并没有浪费时间在这个题目上。最后还有一个多小时没事做的情况下，我们才开始细细的推导这道题。 当时有两个思路： 1. 先用强连通分量来判断是不是无解，求这个图的圈覆盖，而后试图把圈合并。 2. 先用强连通分量来判断是不是无解，然后搜索答案。 第一个思路我感觉是比较接近最终答案的，但是因为就连最初的假设“存在哈密顿路的充分必要条件是整个图在一个强连通分量里面”都不确定是不是正确的，所以这个思路并没有发展成熟。 第二个思路比较简单，所以在没有办法的情况下，我去用这个思路试图“水了水”。得到的结果也是理所当然的TLE。在用了各种搜索技巧提交了几十次之后，比赛结束了。 最后的结果是浙大的队伍做出了J题，AK了所有的题目。 我们因为罚时排在了9题第一总排名第二，虽然有些小小的遗憾，但是终究还是输在了实力上，就算没有J题，也是只能第二名。 结束语： 能够和Dumbear和ISea组队很开心，赛后找了一个网吧10个人打Dota内战，大家在尽兴之后开始了此次比赛的结束之旅。 在回去的路上得知了另外两只6题的队伍，一个银牌第一，一个银牌第三。不过是因为输在题数上，所以我想也没什么特别的遗憾。 Dumbear和ISea在赛场上显得很老练，对各种问题的处理也很成熟。我想他们两个再加上我们的传奇人物，一定能够在赛场上取得辉煌的成绩。 虽然今年我们集训队相比去年来说有种种不足和问题，但是我相信今年区域赛我们还是会有更大的突破的。 大家加油～激情比赛，为了目标而奋斗到底：）]]></description>
			<content:encoded><![CDATA[<p>Open是武大长期流传下来的人文精神，也是我们集训队一直的宝贵财富。因此我们在Legend的基础上取名OpenLegend，作为本次比赛的队名。</p>
<p>比赛前一天：</p>
<p>本来是想周六中午BG大家的，结果发现了浙江理工在下沙之后就知道中午来不及BG了，所以改到晚上。晚上的湘菜馆还是挺不错的，虽然我感觉不够辣。。吃饭的时候看大家的状态都不错，都挺Happy的。</p>
<p>周六下午热身赛的时候，Dumbear问了我一句：“我们的比赛策略是什么？”</p>
<p>听到这个问题之后，我顿时感觉大脑空白了几秒。</p>
<p>思索了良久这个问题的答案，回想起了以前在ChaeYeon队伍的时候制定的种种策略，比如赛前要制定表格，说好每个人的读题顺序，想好卡题了怎么办，碰到什么类型的题目让谁做，谁负责主要读题，谁负责帮队友debug等等等等。</p>
<p>在回想完这种种之后，不知道为什么感觉这些策略都不值得提出来，于是跟Dumbear说:“到时候看情况，该怎么样就怎么样吧。”</p>
<p>不过虽然没有继续讨论“策略”这个问题，我仍然在那里静静的思考了良久，或许真正的策略便跟武侠里面一样“重剑无锋，无招胜有招”。</p>
<p> <span id="more-113"></span>
</p>
<p>周日上午九点，比赛正式开始了：</p>
<p>简单题H和A：</p>
<p>Dumbear和ISea开始读题。这时候我把每一个题目都扫描了一下。为什么要这么做呢？</p>
<p>这还需要从出题说起，自从去年开始大量出题之后，自我感觉上我对比赛的一些细节问题有了一些很新的认识。比如：一般来说这种强度的邀请赛都会有一个sb题来保证每一个队伍都至少AC一道题。而这种SB题是字符串处理的概率很大，因为字符串处理题好出-.-</p>
<p>在寻找了一圈样例里面有字符串的题目之后，我选中了H，运气挺好的，H确实是一个足够简单的题目。</p>
<p>我在上机的时候Dumbear还问了我H是什么类型的，本想解释一番的我想到Dumbear可能是怕这个题目不够简单，怕我太急了。所以我随口回复了“H是A+B类型的题目。”</p>
<p>AC了H之后Dumbear上来AC了A题。这时候差不多是9点30分，也就是说比赛经过了半个小时了。我猜想接下来的题目应该就没有A和H那么简单了，没想到的是剩下的题目难度也都不大。唯一的压轴难题确是我们几乎没有可能做出来的题。</p>
<p>计算几何D题：</p>
<p>我在写H题的时候就听Dumbear和ISea在讨论有一个简单的计算几何，DumbearAC了A之后我便上机开始敲这道几何题（D题）。计算几何写完之后有个小插曲，就是不知道为什么有一个泛型的函数编译通过不了。在询问了ISea和Dumbear之后，他俩也表示不知道。于是我果断停止在这里纠结，换了一种写法。编译通过并且过了样例之后，我又盯着代码看了一会，继续回想了一下是不是有特殊情况。这时候ISea问怎么样了，我答：“可以交了”。Dumbear附和了一句“交吧，感觉momo这题写的挺仔细，应该没问题。”听到这句话我小小的惊讶了一下，为什么Dumbear会知道我写的很仔细呢？</p>
<p>D题1Y。</p>
<p>状态压缩DP题 B和数据结构题F：</p>
<p>ISea很早就说了B是一个简单题，不过因为题目里面要牵扯到棒球的规则，所以ISea在跟我讲这个题目意思和做法的时候，我只是听了一个大概。不过我还是挺相信ISea的，所以我也就没有追求这个题目的细节，跟ISea表示了一下问题不大后，ISea也是直接去写了。</p>
<p>而后Dumbear跟我讲了讲F题题意以及RMQ的做法。我知道题意之后发现此题就是求一个数列中每一个数的左右两边边比他大的第一个数。这个问题的解法我很早就知道了，代码也很短，所以先把ISea从机器上拉了下来，换我上去AC了这道题。</p>
<p>而后ISea也1Y了状态压缩的B题。</p>
<p>乱搞题I：</p>
<p>接下来ISea和Dumbear讨论了一下I题后发现了其“简单题”的本质，不过这中间有一点点冲突：ISea有一个优美的方法，而Dumbear想直接去暴力模拟。最后Dumbear去用ISea的优美方法写的，可惜的是WA了两次也还没有AC。这时候Dumbear和ISea又再次重新读题，在确保了题意理解无误的情况下，Dumbear没办法换了他原来准备的暴力模拟的方法AC了I题。回想此题，最好的情况应该是Dumbear一开始就写最保险的暴力模拟方法。不过在出问题之后Dumbear能够顶住压力重写代码，还是很赞的。</p>
<p>图论+树形DP题E：</p>
<p>E题样例里面输出的是小数，也就是说E题是两种题目可能性最大：几何题或者概率题。这两种不同类型的题目对我来说完全就是两个极端，每次碰上样例输出小数的题目我都是爱恨交加。</p>
<p>我在读完题之后，悲剧的发现是概率题。</p>
<p>在I题的解决过程中，我仔细的研究了一下E题，发现与概率关系不大，在跑完最短路之后只要两边BFS就可以了。不过因为场上还没有提交这个题目，所以我们也并没有急于去写这个题目。后来在跟Dumbear讲解这个题目的题意和做法的同时，我更加确信这个题目的做法没错。所以做法也没有讲完，我就直接上机去写这个题目了。</p>
<p>写完之后WA了一遍，不过我马上意识到了错误的地方（图有可能不联通），因为这个地方在我刚开始写的时候考虑到了，中间因为I题被打断了一次，竟然所以把这个Trick给忘记了。改过之后E题2Y。</p>
<p>需要转弯的矩阵乘法题G：</p>
<p>在Dumbear写I题的时候，我和ISea一直在思索G题的做法，可惜一直没有找到正确的方向。后来经Dumbear提醒才恍然大悟，原来可以改成递推式用矩阵乘法解决。ISea去写了G。因为还有很长时间去写这个题目，所以我们有足够的信心G题肯定能AC。J题AC之后就是剩下最后一题J了。</p>
<p>压轴题J：</p>
<p>此题是浙江省赛的一个变形，这个题对我们来说是一个很大的悲剧，因为浙江省赛的时候是我们校赛决赛的练习赛，Dumbear和ISea是在参赛，我是在出题，所以没有一个人在当时对这个题有细细的研究。不过因为知道这个题目是一个难题，所以我们前期并没有浪费时间在这个题目上。最后还有一个多小时没事做的情况下，我们才开始细细的推导这道题。</p>
<p>当时有两个思路：</p>
<p>1. 先用强连通分量来判断是不是无解，求这个图的圈覆盖，而后试图把圈合并。</p>
<p>2. 先用强连通分量来判断是不是无解，然后搜索答案。</p>
<p>第一个思路我感觉是比较接近最终答案的，但是因为就连最初的假设“存在哈密顿路的充分必要条件是整个图在一个强连通分量里面”都不确定是不是正确的，所以这个思路并没有发展成熟。</p>
<p>第二个思路比较简单，所以在没有办法的情况下，我去用这个思路试图“水了水”。得到的结果也是理所当然的TLE。在用了各种搜索技巧提交了几十次之后，比赛结束了。</p>
<p>最后的结果是浙大的队伍做出了J题，AK了所有的题目。</p>
<p>我们因为罚时排在了9题第一总排名第二，虽然有些小小的遗憾，但是终究还是输在了实力上，就算没有J题，也是只能第二名。</p>
<p>结束语：</p>
<p>能够和Dumbear和ISea组队很开心，赛后找了一个网吧10个人打Dota内战，大家在尽兴之后开始了此次比赛的结束之旅。</p>
<p>在回去的路上得知了另外两只6题的队伍，一个银牌第一，一个银牌第三。不过是因为输在题数上，所以我想也没什么特别的遗憾。</p>
<p>Dumbear和ISea在赛场上显得很老练，对各种问题的处理也很成熟。我想他们两个再加上我们的传奇人物，一定能够在赛场上取得辉煌的成绩。</p>
<p>虽然今年我们集训队相比去年来说有种种不足和问题，但是我相信今年区域赛我们还是会有更大的突破的。</p>
<p>大家加油～激情比赛，为了目标而奋斗到底：）</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=113</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>HDOJ Monthly Contest &#8211; 2010.05.01 Line belt</title>
		<link>http://gaoyunxiang.com/?p=111</link>
		<comments>http://gaoyunxiang.com/?p=111#comments</comments>
		<pubDate>Sat, 01 May 2010 10:36:41 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Imemory]]></category>
		<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[HDOJ Monthly]]></category>
		<category><![CDATA[三分]]></category>
		<category><![CDATA[计算几何]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=111</guid>
		<description><![CDATA[这题是我最早想给HDOJ月赛的，现在借lxh达到了这个目的-.-! http://acm.hdu.edu.cn/vip/contest_showproblem.php?pid=1004&#38;cid=289 没啥特别意思的几何题。。做法就是双重三分，也就是三分里面套一个三分。 放在这里记录一下我的出题成果：） 突然发现，最近这一年我也狠狠的出了不少题了。从区域赛的出题到我们的校赛，再加上PKU和HDU的月赛加起来有几十道了。每一道题我都力求创新，绝不Copy陈题。。 想想出题最累的还是给区域赛出的题。。从最初组建了多人的出题委员会，到最后这个委员会只有我一个人。那个时候我相当囧迫，每天绞尽脑汁的想Idea想了整整一个暑假，好不容易凑出来十个题目。 虽然没啥经验，但是这十个题目还是整合了我参加acm这么多年以来的精华。我感觉挺不错的有两个：1. 原创了圆的面积并的算法。2. 完成了一个很复杂的但是却很有实际背景图论模型的建模（后来的决赛的I题）。 因为题目是我一个人出的，所以必然显得类型很偏门。不过我很奇怪的是为啥复旦的一些人那么愤愤不平，公然在校内上鄙视我们学校-.-（让我想起了多年以前也是复旦一队的成员公然跑到我们学校的OJ上说我们的OJ垃圾，骗代码。。） 预赛搞完了之后，和复旦的这件事好像搞的很多人都知道了，我们集训队也有很多人愤愤不平，跑到人家校内上有了开始对骂的势头-.- 没办法，为了不让事情搞大影响集训队的形象，我专门找到复旦的一个负责人，跟人家说明情况，并且对题目表示Sorry。。还好复旦也比较通情达理，都删掉了校内上的那些对话，一段往事就这样平息了。。 不过还是有点小小的无语。。我们都已经表示了决赛的题目不是我们出，预赛是因为经费问题所以才由我们自己出的。为啥有些人就不能宽容一点？还好当时正在研究佛法，我表示”忍了“，要是按照我以前的火爆性子，早就不知道啥样了。。 再后来看见有人用很不友好的言语在他的blog里面说我们学校公布的标程故意耍帅，故意不让别人看懂。。在表示无语的同时我也理解了一个道理，在做一些自认为是好事的时候，必然有一些人对你进行言语上的攻击，他们也不一定就是恶意，只是表示一下自己不爽了。。]]></description>
			<content:encoded><![CDATA[<p>这题是我最早想给HDOJ月赛的，现在借lxh达到了这个目的-.-!</p>
<p><a href="http://acm.hdu.edu.cn/vip/contest_showproblem.php?pid=1004&amp;cid=289">http://acm.hdu.edu.cn/vip/contest_showproblem.php?pid=1004&amp;cid=289</a></p>
<p>没啥特别意思的几何题。。做法就是双重三分，也就是三分里面套一个三分。</p>
<p>放在这里记录一下我的出题成果：）<span id="more-111"></span></p>
<p>突然发现，最近这一年我也狠狠的出了不少题了。从区域赛的出题到我们的校赛，再加上PKU和HDU的月赛加起来有几十道了。每一道题我都力求创新，绝不Copy陈题。。</p>
<p>想想出题最累的还是给区域赛出的题。。从最初组建了多人的出题委员会，到最后这个委员会只有我一个人。那个时候我相当囧迫，每天绞尽脑汁的想Idea想了整整一个暑假，好不容易凑出来十个题目。</p>
<p>虽然没啥经验，但是这十个题目还是整合了我参加acm这么多年以来的精华。我感觉挺不错的有两个：1. 原创了圆的面积并的算法。2. 完成了一个很复杂的但是却很有实际背景图论模型的建模（后来的决赛的I题）。</p>
<p>因为题目是我一个人出的，所以必然显得类型很偏门。不过我很奇怪的是为啥复旦的一些人那么愤愤不平，公然在校内上鄙视我们学校-.-（让我想起了多年以前也是复旦一队的成员公然跑到我们学校的OJ上说我们的OJ垃圾，骗代码。。）</p>
<p>预赛搞完了之后，和复旦的这件事好像搞的很多人都知道了，我们集训队也有很多人愤愤不平，跑到人家校内上有了开始对骂的势头-.-<br />
没办法，为了不让事情搞大影响集训队的形象，我专门找到复旦的一个负责人，跟人家说明情况，并且对题目表示Sorry。。还好复旦也比较通情达理，都删掉了校内上的那些对话，一段往事就这样平息了。。</p>
<p>不过还是有点小小的无语。。我们都已经表示了决赛的题目不是我们出，预赛是因为经费问题所以才由我们自己出的。为啥有些人就不能宽容一点？还好当时正在研究佛法，我表示”忍了“，要是按照我以前的火爆性子，早就不知道啥样了。。</p>
<p>再后来看见有人用很不友好的言语在他的blog里面说我们学校公布的标程故意耍帅，故意不让别人看懂。。在表示无语的同时我也理解了一个道理，在做一些自认为是好事的时候，必然有一些人对你进行言语上的攻击，他们也不一定就是恶意，只是表示一下自己不爽了。。</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=111</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>武汉大学第八届程序设计竞赛部分决赛题目分析</title>
		<link>http://gaoyunxiang.com/?p=108</link>
		<comments>http://gaoyunxiang.com/?p=108#comments</comments>
		<pubDate>Sun, 18 Apr 2010 06:56:52 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[WHU2010校赛决赛]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[匹配]]></category>
		<category><![CDATA[图论]]></category>
		<category><![CDATA[计算几何]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=108</guid>
		<description><![CDATA[在这里简单说一些我出的题目。 F: Pie 此题很明显的是一个最小匹配的模型。而后根据题目数据的特点可以利用DP来解决。 简单说一下性质： 1. 排序之后的匹配是不存在交叉线的。也就是说，如果第i高的男的和第j高的女的匹配，那么比i矮的男的就不能和比j高的女的匹配。同理，比i高的男的也就不能和比j矮的女的匹配。 2. 题目里有说男女的人数相差不到100，所以我们可以知道一个人的的可选匹配数量最多是100个。再加上这个性质，我们就可以用O(n * 100) = O(1000000)的DP来解决这个问题。相关的实现要用到滚存。 附上代码： Pie.cpp /* * Author: momodi * Created Time:  2010-4-11 15:24:02 * File Name: Pie.cpp */ #include &#60;iostream&#62; #include &#60;cstdio&#62; #include &#60;cstring&#62; #include &#60;cmath&#62; #include &#60;cstdlib&#62; #include &#60;algorithm&#62; #include &#60;vector&#62; using namespace std; #define out(v) cerr &#60;&#60; #v &#60;&#60; &#8220;: &#8220; &#60;&#60; (v) [...]]]></description>
			<content:encoded><![CDATA[<p>在这里简单说一些我出的题目。</p>
<p>F: Pie</p>
<p>此题很明显的是一个最小匹配的模型。而后根据题目数据的特点可以利用DP来解决。</p>
<p>简单说一下性质：</p>
<p>1. 排序之后的匹配是不存在交叉线的。也就是说，如果第i高的男的和第j高的女的匹配，那么比i矮的男的就不能和比j高的女的匹配。同理，比i高的男的也就不能和比j矮的女的匹配。</p>
<p>2. 题目里有说男女的人数相差不到100，所以我们可以知道一个人的的可选匹配数量最多是100个。再加上这个性质，我们就可以用O(n * 100) = O(1000000)的DP来解决这个问题。相关的实现要用到滚存。</p>
<p>附上代码：<span id="more-108"></span></p>
<div id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3c32e536-9e74-4686-901f-66139e72ec19" class="wlWriterEditableSmartContent" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Pie.cpp</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;">
<ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">/*</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * Author: momodi</span></li>
<li><span style="color: #008000;"> * Created Time:  2010-4-11 15:24:02</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * File Name: Pie.cpp</span></li>
<li><span style="color: #008000;"> */</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;iostream&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdio&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstring&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cmath&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdlib&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;algorithm&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;vector&gt;</span></li>
<li><span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> <span style="color: #010001;">std</span>;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#define</span> <span style="color: #010001;">out</span>(<span style="color: #010001;">v</span>) <span style="color: #010001;">cerr</span> &lt;&lt; #<span style="color: #010001;">v</span> &lt;&lt; <span style="color: #a31515;">&#8220;: &#8220;</span> &lt;&lt; (<span style="color: #010001;">v</span>) &lt;&lt; <span style="color: #010001;">endl</span></li>
<li><span style="color: #0000ff;">#define</span> <span style="color: #010001;">SZ</span>(<span style="color: #010001;">v</span>) ((<span style="color: #0000ff;">int</span>)(<span style="color: #010001;">v</span>).<span style="color: #010001;">size</span>())</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxint</span> = -1u&gt;&gt;1;</li>
<li><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_max</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &gt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &lt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxn</span> = 10000;</li>
<li><span style="color: #0000ff;">double</span> <span style="color: #010001;">dtn</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">dtm</span>[<span style="color: #010001;">maxn</span>];</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">int</span> <span style="color: #010001;">n</span>, <span style="color: #010001;">m</span>;</li>
<li><span style="color: #0000ff;">double</span> <span style="color: #010001;">f</span>[2][<span style="color: #010001;">maxn</span> + 1];</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">double</span> <span style="color: #010001;">solve</span>() {</li>
<li> <span style="color: #010001;">memset</span>(<span style="color: #010001;">f</span>, 0, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">f</span>));</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">f</span>[0][0] = <span style="color: #010001;">f</span>[1][0] = 0;</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 1; <span style="color: #010001;">i</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">double</span> *<span style="color: #010001;">now</span> = <span style="color: #010001;">f</span>[1 ^ (<span style="color: #010001;">i</span> &amp; 1)], *<span style="color: #010001;">pre</span> = <span style="color: #010001;">f</span>[<span style="color: #010001;">i</span> &amp; 1];</li>
<li> <span style="color: #010001;">now</span>[<span style="color: #010001;">i</span> - 1] = 1e100;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = <span style="color: #010001;">i</span>; <span style="color: #010001;">j</span> + (<span style="color: #010001;">n</span> &#8211; <span style="color: #010001;">i</span>) &lt;= <span style="color: #010001;">m</span>; ++<span style="color: #010001;">j</span>) {</li>
<li> <span style="color: #010001;">now</span>[<span style="color: #010001;">j</span>] = <span style="color: #010001;">min</span>(<span style="color: #010001;">now</span>[<span style="color: #010001;">j</span> - 1], <span style="color: #010001;">pre</span>[<span style="color: #010001;">j</span> - 1] + <span style="color: #010001;">abs</span>(<span style="color: #010001;">dtn</span>[<span style="color: #010001;">i</span> - 1] &#8211; <span style="color: #010001;">dtm</span>[<span style="color: #010001;">j</span> - 1]));</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> <span style="color: #010001;">f</span>[1 ^ (<span style="color: #010001;">n</span> &amp; 1)][<span style="color: #010001;">m</span>];</li>
<li>}</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">main</span>() {</li>
<li style="background: #f3f3f3;"> <span style="color: #008000;">//freopen(&#8220;Pie.out&#8221;, &#8220;w&#8221;, stdout);</span></li>
<li> <span style="color: #0000ff;">while</span> (<span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d %d&#8221;</span>, &amp;<span style="color: #010001;">n</span>, &amp;<span style="color: #010001;">m</span>) == 2 &amp;&amp; (<span style="color: #010001;">n</span> || <span style="color: #010001;">m</span>)) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%lf&#8221;</span>, <span style="color: #010001;">dtn</span> + <span style="color: #010001;">i</span>);</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">m</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%lf&#8221;</span>, <span style="color: #010001;">dtm</span> + <span style="color: #010001;">i</span>);</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">sort</span>(<span style="color: #010001;">dtn</span>, <span style="color: #010001;">dtn</span> + <span style="color: #010001;">n</span>);</li>
<li> <span style="color: #010001;">sort</span>(<span style="color: #010001;">dtm</span>, <span style="color: #010001;">dtm</span> + <span style="color: #010001;">m</span>);</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">n</span> &gt; <span style="color: #010001;">m</span>) {</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">swap</span>(<span style="color: #010001;">dtn</span>[<span style="color: #010001;">i</span>], <span style="color: #010001;">dtm</span>[<span style="color: #010001;">i</span>]);</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">swap</span>(<span style="color: #010001;">n</span>, <span style="color: #010001;">m</span>);</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">printf</span>(<span style="color: #a31515;">&#8220;%.6f\n&#8221;</span>, <span style="color: #010001;">solve</span>());</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> 0;</li>
<li>}</li>
</ol>
</div>
</div>
</div>
<p>G: Precious</p>
<p>这个题说白了就是判断一个简单多边形内部的两个点是不是可见的。做法也很简单，可能大家都对几何不感冒，不是很愿意去做。</p>
<p>判断两个点是不是可见的做法：</p>
<p>1. 用两个点来做一个端点都是开的线段，然后和多边形求交点，如果有交点的话，那么就是不可见的。</p>
<p>2. 取这个线段的中点来看看这个点是不是在简单多边形内部，如果不在内部的话，那么也是不可见的。</p>
<p>满足上面两个条件的就都是可见的。</p>
<p>知道了任意两个点是不是可见的之后，建立一个图，然后跑一下最短路就好了。</p>
<p>代码：</p>
<div id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:37258a21-bfe7-4bfb-b7f0-6415e89fc04b" class="wlWriterEditableSmartContent" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Precious.cpp</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;">
<ol style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">/*</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * Author: momodi</span></li>
<li><span style="color: #008000;"> * Created Time:  2010-4-14 15:55:08</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * File Name: Precious.cpp</span></li>
<li><span style="color: #008000;"> */</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;iostream&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdio&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstring&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cmath&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdlib&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;algorithm&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;vector&gt;</span></li>
<li><span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> <span style="color: #010001;">std</span>;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#define</span> <span style="color: #010001;">out</span>(<span style="color: #010001;">v</span>) <span style="color: #010001;">cerr</span> &lt;&lt; #<span style="color: #010001;">v</span> &lt;&lt; <span style="color: #a31515;">&#8220;: &#8220;</span> &lt;&lt; (<span style="color: #010001;">v</span>) &lt;&lt; <span style="color: #010001;">endl</span></li>
<li><span style="color: #0000ff;">#define</span> <span style="color: #010001;">SZ</span>(<span style="color: #010001;">v</span>) ((<span style="color: #0000ff;">int</span>)(<span style="color: #010001;">v</span>).<span style="color: #010001;">size</span>())</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxint</span> = -1u&gt;&gt;1;</li>
<li><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_max</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &gt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &lt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #010001;">eps</span> = 1e-9;</li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">sgn</span>(<span style="color: #0000ff;">double</span> <span style="color: #010001;">a</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> (<span style="color: #010001;">a</span> &gt; <span style="color: #010001;">eps</span>) &#8211; (<span style="color: #010001;">a</span> &lt; -<span style="color: #010001;">eps</span>);</li>
<li>}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#define</span> <span style="color: #010001;">SQR</span>(<span style="color: #010001;">v</span>) ((<span style="color: #010001;">v</span>) * (<span style="color: #010001;">v</span>))</li>
<li><span style="color: #0000ff;">struct</span> <span style="color: #010001;">P</span> {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">double</span> <span style="color: #010001;">x</span>, <span style="color: #010001;">y</span>;</li>
<li> <span style="color: #010001;">P</span>(<span style="color: #0000ff;">double</span> <span style="color: #010001;">x</span>, <span style="color: #0000ff;">double</span> <span style="color: #010001;">y</span>):<span style="color: #010001;">x</span>(<span style="color: #010001;">x</span>), <span style="color: #010001;">y</span>(<span style="color: #010001;">y</span>){}</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">P</span>():<span style="color: #010001;">x</span>(0), <span style="color: #010001;">y</span>(0){}</li>
<li> <span style="color: #0000ff;">double</span> <span style="color: #010001;">cross</span>(<span style="color: #010001;">P</span> <span style="color: #010001;">a</span>, <span style="color: #010001;">P</span> <span style="color: #010001;">b</span>) <span style="color: #0000ff;">const</span> {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> (<span style="color: #010001;">a</span>.<span style="color: #010001;">x</span> &#8211; <span style="color: #010001;">x</span>) * (<span style="color: #010001;">b</span>.<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">y</span>) &#8211; (<span style="color: #010001;">a</span>.<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">y</span>) * (<span style="color: #010001;">b</span>.<span style="color: #010001;">x</span> &#8211; <span style="color: #010001;">x</span>);</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">double</span> <span style="color: #010001;">dot</span>(<span style="color: #010001;">P</span> <span style="color: #010001;">a</span>, <span style="color: #010001;">P</span> <span style="color: #010001;">b</span>) <span style="color: #0000ff;">const</span> {</li>
<li> <span style="color: #0000ff;">return</span> (<span style="color: #010001;">a</span>.<span style="color: #010001;">x</span> &#8211; <span style="color: #010001;">x</span>) * (<span style="color: #010001;">b</span>.<span style="color: #010001;">x</span> &#8211; <span style="color: #010001;">x</span>) + (<span style="color: #010001;">a</span>.<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">y</span>) * (<span style="color: #010001;">b</span>.<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">y</span>);</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">double</span> <span style="color: #010001;">dist</span>(<span style="color: #010001;">P</span> <span style="color: #010001;">a</span>) <span style="color: #0000ff;">const</span> {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> <span style="color: #010001;">sqrt</span>(<span style="color: #010001;">SQR</span>(<span style="color: #010001;">a</span>.<span style="color: #010001;">x</span> &#8211; <span style="color: #010001;">x</span>) + <span style="color: #010001;">SQR</span>(<span style="color: #010001;">a</span>.<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">y</span>));</li>
<li> }</li>
<li style="background: #f3f3f3;">};</li>
<li></li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxn</span> = 110;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">int</span> <span style="color: #010001;">n</span>, <span style="color: #010001;">m</span>;</li>
<li><span style="color: #010001;">P</span> <span style="color: #010001;">poly</span>[<span style="color: #010001;">maxn</span>];</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">int</span> <span style="color: #010001;">type</span>[<span style="color: #010001;">maxn</span>];</li>
<li></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">bool</span> <span style="color: #010001;">inter</span>(<span style="color: #010001;">P</span> <span style="color: #010001;">a</span>, <span style="color: #010001;">P</span> <span style="color: #010001;">b</span>, <span style="color: #010001;">P</span> <span style="color: #010001;">c</span>, <span style="color: #010001;">P</span> <span style="color: #010001;">d</span>) {</li>
<li> <span style="color: #0000ff;">double</span> <span style="color: #010001;">s1</span> = <span style="color: #010001;">a</span>.<span style="color: #010001;">cross</span>(<span style="color: #010001;">b</span>, <span style="color: #010001;">c</span>);</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">double</span> <span style="color: #010001;">s2</span> = <span style="color: #010001;">a</span>.<span style="color: #010001;">cross</span>(<span style="color: #010001;">b</span>, <span style="color: #010001;">d</span>);</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">sgn</span>(<span style="color: #010001;">s1</span> &#8211; <span style="color: #010001;">s2</span>) == 0) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">P</span> <span style="color: #010001;">t</span> = <span style="color: #010001;">P</span>((<span style="color: #010001;">c</span>.<span style="color: #010001;">x</span> * <span style="color: #010001;">s2</span> &#8211; <span style="color: #010001;">d</span>.<span style="color: #010001;">x</span> * <span style="color: #010001;">s1</span>) / (<span style="color: #010001;">s2</span> &#8211; <span style="color: #010001;">s1</span>), (<span style="color: #010001;">c</span>.<span style="color: #010001;">y</span> * <span style="color: #010001;">s2</span> &#8211; <span style="color: #010001;">d</span>.<span style="color: #010001;">y</span> * <span style="color: #010001;">s1</span>) / (<span style="color: #010001;">s2</span> &#8211; <span style="color: #010001;">s1</span>));</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #010001;">sgn</span>(<span style="color: #010001;">t</span>.<span style="color: #010001;">dot</span>(<span style="color: #010001;">a</span>, <span style="color: #010001;">b</span>)) &lt; 0 &amp;&amp; <span style="color: #010001;">sgn</span>(<span style="color: #010001;">t</span>.<span style="color: #010001;">dot</span>(<span style="color: #010001;">c</span>, <span style="color: #010001;">d</span>)) &lt;= 0;</li>
<li style="background: #f3f3f3;">}</li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">inside</span>(<span style="color: #0000ff;">const</span> <span style="color: #010001;">P</span> &amp;<span style="color: #010001;">p</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">int</span> <span style="color: #010001;">ans</span> = -1;</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #010001;">P</span> *<span style="color: #010001;">it</span> = <span style="color: #010001;">poly</span> + <span style="color: #010001;">n</span> &#8211; 1, *<span style="color: #010001;">jt</span> = <span style="color: #010001;">poly</span>; <span style="color: #010001;">jt</span> != <span style="color: #010001;">poly</span> + <span style="color: #010001;">n</span>; <span style="color: #010001;">it</span> = <span style="color: #010001;">jt</span>++) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">double</span> <span style="color: #010001;">t</span> = <span style="color: #010001;">it</span>-&gt;<span style="color: #010001;">y</span> &lt; <span style="color: #010001;">jt</span>-&gt;<span style="color: #010001;">y</span> ? <span style="color: #010001;">it</span>-&gt;<span style="color: #010001;">cross</span>(*<span style="color: #010001;">jt</span>, <span style="color: #010001;">p</span>) : <span style="color: #010001;">jt</span>-&gt;<span style="color: #010001;">cross</span>(*<span style="color: #010001;">it</span>, <span style="color: #010001;">p</span>);</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">sgn</span>(<span style="color: #010001;">t</span>) == 0 &amp;&amp; <span style="color: #010001;">sgn</span>(<span style="color: #010001;">p</span>.<span style="color: #010001;">dot</span>(*<span style="color: #010001;">it</span>, *<span style="color: #010001;">jt</span>)) &lt;= 0) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> 0;   <span style="color: #008000;">// point p is on the polygon.</span></li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">sgn</span>(<span style="color: #010001;">t</span>) &lt; 0 &amp;&amp; ((<span style="color: #010001;">sgn</span>(<span style="color: #010001;">it</span>-&gt;<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">p</span>.<span style="color: #010001;">y</span>) &lt; 0) ^ (<span style="color: #010001;">sgn</span>(<span style="color: #010001;">jt</span>-&gt;<span style="color: #010001;">y</span> &#8211; <span style="color: #010001;">p</span>.<span style="color: #010001;">y</span>) &lt; 0))) {</li>
<li> <span style="color: #010001;">ans</span> *= -1;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> <span style="color: #010001;">ans</span>; <span style="color: #008000;">//if ans == 1 point is in the polygon and if ans == -1 point is out the polygon.</span></li>
<li>}</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">bool</span> <span style="color: #010001;">conn</span>(<span style="color: #010001;">P</span> <span style="color: #010001;">S</span>, <span style="color: #010001;">P</span> <span style="color: #010001;">T</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">inside</span>(<span style="color: #010001;">P</span>((<span style="color: #010001;">S</span>.<span style="color: #010001;">x</span> + <span style="color: #010001;">T</span>.<span style="color: #010001;">x</span>) / 2, (<span style="color: #010001;">S</span>.<span style="color: #010001;">y</span> + <span style="color: #010001;">T</span>.<span style="color: #010001;">y</span>) / 2)) == -1) {</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = <span style="color: #010001;">n</span> &#8211; 1, <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; <span style="color: #010001;">i</span> = <span style="color: #010001;">j</span>++) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">inter</span>(<span style="color: #010001;">S</span>, <span style="color: #010001;">T</span>, <span style="color: #010001;">poly</span>[<span style="color: #010001;">i</span>], <span style="color: #010001;">poly</span>[<span style="color: #010001;">j</span>])) {</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;</li>
<li>}</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">double</span> <span style="color: #010001;">adj</span>[<span style="color: #010001;">maxn</span>][<span style="color: #010001;">maxn</span>];</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">double</span> <span style="color: #010001;">solve</span>() {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = <span style="color: #010001;">i</span> + 1; <span style="color: #010001;">j</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">conn</span>(<span style="color: #010001;">poly</span>[<span style="color: #010001;">i</span>], <span style="color: #010001;">poly</span>[<span style="color: #010001;">j</span>])) {</li>
<li> <span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">j</span>] = <span style="color: #010001;">adj</span>[<span style="color: #010001;">j</span>][<span style="color: #010001;">i</span>] = <span style="color: #010001;">poly</span>[<span style="color: #010001;">i</span>].<span style="color: #010001;">dist</span>(<span style="color: #010001;">poly</span>[<span style="color: #010001;">j</span>]);</li>
<li style="background: #f3f3f3;"> } <span style="color: #0000ff;">else</span> {</li>
<li> <span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">j</span>] = <span style="color: #010001;">adj</span>[<span style="color: #010001;">j</span>][<span style="color: #010001;">i</span>] = 1e100;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">k</span> = 0; <span style="color: #010001;">k</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">k</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">j</span>], <span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">k</span>] + <span style="color: #010001;">adj</span>[<span style="color: #010001;">k</span>][<span style="color: #010001;">j</span>]);</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">double</span> <span style="color: #010001;">tot</span> = 0, <span style="color: #010001;">OK</span> = 0;</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">type</span>[<span style="color: #010001;">i</span>] != 0) {</li>
<li> ++<span style="color: #010001;">tot</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">type</span>[<span style="color: #010001;">i</span>] == -1 &amp;&amp; <span style="color: #010001;">type</span>[<span style="color: #010001;">j</span>] == 1 &amp;&amp; <span style="color: #010001;">sgn</span>(<span style="color: #010001;">adj</span>[<span style="color: #010001;">n</span>][<span style="color: #010001;">i</span>] + <span style="color: #010001;">adj</span>[<span style="color: #010001;">n</span>][<span style="color: #010001;">j</span>] &#8211; <span style="color: #010001;">m</span>) &lt;= 0) {</li>
<li> ++<span style="color: #010001;">OK</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #008000;">//for (int i = 0; i &lt; n; ++i) {</span></li>
<li style="background: #f3f3f3;"> <span style="color: #008000;">//printf(&#8220;%.2f &#8220;, adj[i][n]);</span></li>
<li> <span style="color: #008000;">//}</span></li>
<li style="background: #f3f3f3;"> <span style="color: #008000;">//puts(&#8220;&#8221;);</span></li>
<li> <span style="color: #008000;">//printf(&#8220;%.0f %.0f %.0f\n&#8221;, I, O, tot);</span></li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">tot</span> == 0) <span style="color: #0000ff;">return</span> 0;</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #010001;">OK</span> / (<span style="color: #010001;">tot</span> * <span style="color: #010001;">tot</span>);</li>
<li style="background: #f3f3f3;">}</li>
<li></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">int</span> <span style="color: #010001;">main</span>() {</li>
<li> <span style="color: #008000;">//freopen(&#8220;test.in&#8221;, &#8220;r&#8221;, stdin);</span></li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">freopen</span>(<span style="color: #a31515;">&#8220;Precious.out&#8221;</span>, <span style="color: #a31515;">&#8220;w&#8221;</span>, <span style="color: #010001;">stdout</span>);</li>
<li> <span style="color: #0000ff;">while</span> (<span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d %d&#8221;</span>, &amp;<span style="color: #010001;">n</span>, &amp;<span style="color: #010001;">m</span>) == 2 &amp;&amp; (<span style="color: #010001;">n</span> || <span style="color: #010001;">m</span>)) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt;= <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%lf %lf&#8221;</span>, &amp;<span style="color: #010001;">poly</span>[<span style="color: #010001;">i</span>].<span style="color: #010001;">x</span>, &amp;<span style="color: #010001;">poly</span>[<span style="color: #010001;">i</span>].<span style="color: #010001;">y</span>);</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>) {</li>
<li> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d&#8221;</span>, <span style="color: #010001;">type</span> + <span style="color: #010001;">i</span>);</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">printf</span>(<span style="color: #a31515;">&#8220;%.9f\n&#8221;</span>, <span style="color: #010001;">solve</span>());</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> 0;</li>
<li>}</li>
</ol>
</div>
</div>
</div>
<p>H: Railway</p>
<p>题意就是边是属于无向图的0个环，1一个环，还是多个环。</p>
<p>这是一个利用双连通分量来求解的图论题。</p>
<p>把原来的图的双连通分量都求出来之后，判断每一个连通分量里面的点和边的数量的关系。</p>
<p>1. 点&gt;边 那么这些边都是没有用的。</p>
<p>2. 点=边 那么这些边都是有用的。</p>
<p>3. 点&lt;边 那么这些边都是会发生冲突的。</p>
<p>代码：</p>
<div id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:26ac9137-233e-4cd1-914f-8d1cdb6dfbb2" class="wlWriterEditableSmartContent" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Railway.cpp</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;">
<ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">/*</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * Author: momodi</span></li>
<li><span style="color: #008000;"> * Created Time:  2010-4-15 14:32:25</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * File Name: Railway.cpp</span></li>
<li><span style="color: #008000;"> */</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;iostream&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdio&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstring&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cmath&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdlib&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;algorithm&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;vector&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cassert&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> <span style="color: #010001;">std</span>;</li>
<li><span style="color: #0000ff;">#define</span> <span style="color: #010001;">out</span>(<span style="color: #010001;">v</span>) <span style="color: #010001;">cerr</span> &lt;&lt; #<span style="color: #010001;">v</span> &lt;&lt; <span style="color: #a31515;">&#8220;: &#8220;</span> &lt;&lt; (<span style="color: #010001;">v</span>) &lt;&lt; <span style="color: #010001;">endl</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#define</span> <span style="color: #010001;">SZ</span>(<span style="color: #010001;">v</span>) ((<span style="color: #0000ff;">int</span>)(<span style="color: #010001;">v</span>).<span style="color: #010001;">size</span>())</li>
<li><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxint</span> = -1u&gt;&gt;1;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_max</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &gt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &lt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxn</span> = 10000;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxm</span> = 100000;</li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">n</span>, <span style="color: #010001;">m</span>;</li>
<li style="background: #f3f3f3;"><span style="color: #010001;">vector</span>&lt;<span style="color: #0000ff;">int</span>&gt; <span style="color: #010001;">adj</span>[<span style="color: #010001;">maxn</span>];</li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">pre</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">low</span>[<span style="color: #010001;">maxn</span>];</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">int</span> <span style="color: #010001;">ans</span>[3];</li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">tim</span>;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">void</span> <span style="color: #010001;">dfs</span>(<span style="color: #0000ff;">int</span> <span style="color: #010001;">f</span>, <span style="color: #0000ff;">int</span> <span style="color: #010001;">v</span>, <span style="color: #0000ff;">int</span> &amp;<span style="color: #010001;">anstype</span>, <span style="color: #0000ff;">int</span> &amp;<span style="color: #010001;">anscnt</span>) {</li>
<li> <span style="color: #010001;">anstype</span> = <span style="color: #010001;">anscnt</span> = 0;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">int</span> <span style="color: #010001;">newtype</span> = 0, <span style="color: #010001;">newcnt</span> = 0;</li>
<li> <span style="color: #010001;">low</span>[<span style="color: #010001;">v</span>] = <span style="color: #010001;">pre</span>[<span style="color: #010001;">v</span>] = <span style="color: #010001;">tim</span>++;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #010001;">vector</span>&lt;<span style="color: #0000ff;">int</span>&gt;::<span style="color: #010001;">const_iterator</span> <span style="color: #010001;">it</span> = <span style="color: #010001;">adj</span>[<span style="color: #010001;">v</span>].<span style="color: #010001;">begin</span>(); <span style="color: #010001;">it</span> != <span style="color: #010001;">adj</span>[<span style="color: #010001;">v</span>].<span style="color: #010001;">end</span>(); ++<span style="color: #010001;">it</span>) {</li>
<li> <span style="color: #0000ff;">if</span> (*<span style="color: #010001;">it</span> != <span style="color: #010001;">f</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">pre</span>[*<span style="color: #010001;">it</span>] == -1) {</li>
<li> <span style="color: #010001;">dfs</span>(<span style="color: #010001;">v</span>, *<span style="color: #010001;">it</span>, <span style="color: #010001;">newtype</span>, <span style="color: #010001;">newcnt</span>);</li>
<li style="background: #f3f3f3;"> ++<span style="color: #010001;">newcnt</span>;</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">low</span>[*<span style="color: #010001;">it</span>] &gt;= <span style="color: #010001;">pre</span>[<span style="color: #010001;">v</span>]) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">ans</span>[<span style="color: #010001;">min</span>(2, <span style="color: #010001;">newtype</span>)] += <span style="color: #010001;">newcnt</span>;</li>
<li> } <span style="color: #0000ff;">else</span> {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">low</span>[<span style="color: #010001;">v</span>], <span style="color: #010001;">low</span>[*<span style="color: #010001;">it</span>]);</li>
<li> <span style="color: #010001;">anstype</span> += <span style="color: #010001;">newtype</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">anscnt</span> += <span style="color: #010001;">newcnt</span>;</li>
<li> }</li>
<li style="background: #f3f3f3;"> } <span style="color: #0000ff;">else</span> {</li>
<li> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">low</span>[<span style="color: #010001;">v</span>], <span style="color: #010001;">pre</span>[*<span style="color: #010001;">it</span>]);</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">pre</span>[*<span style="color: #010001;">it</span>] &lt; <span style="color: #010001;">pre</span>[<span style="color: #010001;">v</span>]) {</li>
<li> ++<span style="color: #010001;">anstype</span>;</li>
<li style="background: #f3f3f3;"> ++<span style="color: #010001;">anscnt</span>;</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li>}</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #0000ff;">int</span> <span style="color: #010001;">main</span>() {</li>
<li style="background: #f3f3f3;"> <span style="color: #008000;">//freopen(&#8220;test.in&#8221;, &#8220;r&#8221;, stdin);</span></li>
<li> <span style="color: #008000;">//freopen(&#8220;Railway.out&#8221;, &#8220;w&#8221;, stdout);</span></li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">while</span> (<span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d %d&#8221;</span>, &amp;<span style="color: #010001;">n</span>, &amp;<span style="color: #010001;">m</span>) == 2 &amp;&amp; (<span style="color: #010001;">n</span> || <span style="color: #010001;">m</span>)) {</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>].<span style="color: #010001;">clear</span>();</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">m</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #0000ff;">int</span> <span style="color: #010001;">u</span>, <span style="color: #010001;">v</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d %d&#8221;</span>, &amp;<span style="color: #010001;">u</span>, &amp;<span style="color: #010001;">v</span>);</li>
<li> <span style="color: #010001;">adj</span>[<span style="color: #010001;">u</span>].<span style="color: #010001;">push_back</span>(<span style="color: #010001;">v</span>);</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">adj</span>[<span style="color: #010001;">v</span>].<span style="color: #010001;">push_back</span>(<span style="color: #010001;">u</span>);</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">tim</span> = 0;</li>
<li> <span style="color: #010001;">fill</span>(<span style="color: #010001;">pre</span>, <span style="color: #010001;">pre</span> + <span style="color: #010001;">n</span>, -1);</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">fill</span>(<span style="color: #010001;">ans</span>, <span style="color: #010001;">ans</span> + 3, 0);</li>
<li> <span style="color: #0000ff;">int</span> <span style="color: #010001;">type</span>, <span style="color: #010001;">cnt</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">pre</span>[<span style="color: #010001;">i</span>] == -1) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">dfs</span>(<span style="color: #010001;">i</span>, <span style="color: #010001;">i</span>, <span style="color: #010001;">type</span>, <span style="color: #010001;">cnt</span>);</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #008000;">//fprintf(stderr, &#8220;%d %d %d\n&#8221;, ans[0], ans[1], ans[2]);</span></li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">assert</span>(<span style="color: #010001;">ans</span>[0] + <span style="color: #010001;">ans</span>[1] + <span style="color: #010001;">ans</span>[2] == <span style="color: #010001;">m</span>);</li>
<li> <span style="color: #010001;">printf</span>(<span style="color: #a31515;">&#8220;%d %d\n&#8221;</span>, <span style="color: #010001;">ans</span>[0], <span style="color: #010001;">ans</span>[2]);</li>
<li style="background: #f3f3f3;"></li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> 0;</li>
<li>}</li>
</ol>
</div>
</div>
</div>
<p>I: Special Fish</p>
<p>这题我觉得没啥意思。。凑数的。把一个点拆成两个点之后，建立一个模型，然后跑km就好了。</p>
<div id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:34ceb3fa-0759-4e55-99ed-abc9d519417c" class="wlWriterEditableSmartContent" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;">
<ol style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">/*</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * Author: momodi</span></li>
<li><span style="color: #008000;"> * Created Time:  2010-4-11 15:08:20</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;"> * File Name: SpecialFish.cpp</span></li>
<li><span style="color: #008000;"> */</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;iostream&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdio&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstring&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cmath&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;cstdlib&gt;</span></li>
<li><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;algorithm&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#include</span> <span style="color: #a31515;">&lt;vector&gt;</span></li>
<li><span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> <span style="color: #010001;">std</span>;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">#define</span> <span style="color: #010001;">out</span>(<span style="color: #010001;">v</span>) <span style="color: #010001;">cerr</span> &lt;&lt; #<span style="color: #010001;">v</span> &lt;&lt; <span style="color: #a31515;">&#8220;: &#8220;</span> &lt;&lt; (<span style="color: #010001;">v</span>) &lt;&lt; <span style="color: #010001;">endl</span></li>
<li><span style="color: #0000ff;">#define</span> <span style="color: #010001;">SZ</span>(<span style="color: #010001;">v</span>) ((<span style="color: #0000ff;">int</span>)(<span style="color: #010001;">v</span>).<span style="color: #010001;">size</span>())</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxint</span> = -1u&gt;&gt;1;</li>
<li><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_max</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &gt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">class</span> <span style="color: #010001;">T</span>&gt; <span style="color: #0000ff;">bool</span> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">T</span>&amp; <span style="color: #010001;">a</span>, <span style="color: #0000ff;">const</span> <span style="color: #010001;">T</span> &amp;<span style="color: #010001;">b</span>) {<span style="color: #0000ff;">return</span> <span style="color: #010001;">b</span> &lt; <span style="color: #010001;">a</span>? <span style="color: #010001;">a</span> = <span style="color: #010001;">b</span>, 1: 0;}</li>
<li></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">struct</span> <span style="color: #010001;">Graph</span> {</li>
<li> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #010001;">maxn</span> = 100;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">int</span> <span style="color: #010001;">w</span>[<span style="color: #010001;">maxn</span>][<span style="color: #010001;">maxn</span>], <span style="color: #010001;">lx</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">ly</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">matx</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">maty</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">n</span>;</li>
<li> <span style="color: #0000ff;">bool</span> <span style="color: #010001;">fx</span>[<span style="color: #010001;">maxn</span>], <span style="color: #010001;">fy</span>[<span style="color: #010001;">maxn</span>];</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">void</span> <span style="color: #010001;">clear</span>() {</li>
<li> <span style="color: #010001;">memset</span>(<span style="color: #010001;">w</span>, 0, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">w</span>));</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">n</span> = 0;</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">void</span> <span style="color: #010001;">insert</span>(<span style="color: #0000ff;">int</span> <span style="color: #010001;">u</span>, <span style="color: #0000ff;">int</span> <span style="color: #010001;">v</span>, <span style="color: #0000ff;">int</span> <span style="color: #010001;">c</span>) {</li>
<li> <span style="color: #010001;">get_max</span>(<span style="color: #010001;">n</span>, <span style="color: #010001;">max</span>(<span style="color: #010001;">u</span> + 1, <span style="color: #010001;">v</span> + 1));</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">w</span>[<span style="color: #010001;">u</span>][<span style="color: #010001;">v</span>] = <span style="color: #010001;">c</span>;</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">int</span> <span style="color: #010001;">match</span>() {</li>
<li> <span style="color: #010001;">memset</span>(<span style="color: #010001;">ly</span>, 0, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">ly</span>));</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #010001;">lx</span>[<span style="color: #010001;">i</span>] = -<span style="color: #010001;">maxint</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li> <span style="color: #010001;">get_max</span>(<span style="color: #010001;">lx</span>[<span style="color: #010001;">i</span>], <span style="color: #010001;">w</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">j</span>]);</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">memset</span>(<span style="color: #010001;">matx</span>, -1, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">matx</span>));</li>
<li> <span style="color: #010001;">memset</span>(<span style="color: #010001;">maty</span>, -1, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">maty</span>));</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #010001;">memset</span>(<span style="color: #010001;">fx</span>, <span style="color: #0000ff;">false</span>, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">fx</span>));</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">memset</span>(<span style="color: #010001;">fy</span>, <span style="color: #0000ff;">false</span>, <span style="color: #0000ff;">sizeof</span>(<span style="color: #010001;">fy</span>));</li>
<li> <span style="color: #0000ff;">if</span> (!<span style="color: #010001;">dfs</span>(<span style="color: #010001;">i</span>)) {</li>
<li style="background: #f3f3f3;"> &#8211;<span style="color: #010001;">i</span>;</li>
<li> <span style="color: #0000ff;">int</span> <span style="color: #010001;">p</span> = <span style="color: #010001;">maxint</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">k</span> = 0; <span style="color: #010001;">k</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">k</span>) {</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">fx</span>[<span style="color: #010001;">k</span>] == <span style="color: #0000ff;">true</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li> <span style="color: #0000ff;">if</span> ((<span style="color: #010001;">fy</span>[<span style="color: #010001;">j</span>] == <span style="color: #0000ff;">false</span>)) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">get_min</span>(<span style="color: #010001;">p</span>, <span style="color: #010001;">lx</span>[<span style="color: #010001;">k</span>] + <span style="color: #010001;">ly</span>[<span style="color: #010001;">j</span>] &#8211; <span style="color: #010001;">w</span>[<span style="color: #010001;">k</span>][<span style="color: #010001;">j</span>]);</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">ly</span>[<span style="color: #010001;">j</span>] += <span style="color: #010001;">fy</span>[<span style="color: #010001;">j</span>] * <span style="color: #010001;">p</span>;</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">k</span> = 0; <span style="color: #010001;">k</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">k</span>) {</li>
<li> <span style="color: #010001;">lx</span>[<span style="color: #010001;">k</span>] -= <span style="color: #010001;">fx</span>[<span style="color: #010001;">k</span>] * <span style="color: #010001;">p</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">int</span> <span style="color: #010001;">ans</span> = 0;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li> <span style="color: #010001;">ans</span> += <span style="color: #010001;">w</span>[<span style="color: #010001;">maty</span>[<span style="color: #010001;">i</span>]][<span style="color: #010001;">i</span>];</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #010001;">ans</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">bool</span> <span style="color: #010001;">dfs</span>(<span style="color: #0000ff;">int</span> <span style="color: #010001;">u</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">fx</span>[<span style="color: #010001;">u</span>] = 1;</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">v</span> = 0; <span style="color: #010001;">v</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">v</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">lx</span>[<span style="color: #010001;">u</span>] + <span style="color: #010001;">ly</span>[<span style="color: #010001;">v</span>] == <span style="color: #010001;">w</span>[<span style="color: #010001;">u</span>][<span style="color: #010001;">v</span>] &amp;&amp; <span style="color: #010001;">fy</span>[<span style="color: #010001;">v</span>] == <span style="color: #0000ff;">false</span>) {</li>
<li> <span style="color: #010001;">fy</span>[<span style="color: #010001;">v</span>] = <span style="color: #0000ff;">true</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">maty</span>[<span style="color: #010001;">v</span>] == -1 || <span style="color: #010001;">dfs</span>(<span style="color: #010001;">maty</span>[<span style="color: #010001;">v</span>])) {</li>
<li> <span style="color: #010001;">matx</span>[<span style="color: #010001;">u</span>] = <span style="color: #010001;">v</span>;</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">maty</span>[<span style="color: #010001;">v</span>] = <span style="color: #010001;">u</span>;</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;</li>
<li style="background: #f3f3f3;"> }</li>
<li>};</li>
<li style="background: #f3f3f3;"></li>
<li><span style="color: #010001;">Graph</span> <span style="color: #010001;">g</span>;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">int</span> <span style="color: #010001;">main</span>() {</li>
<li> <span style="color: #008000;">//freopen(&#8220;SpecialFish.out&#8221;, &#8220;w&#8221;, stdout);</span></li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">int</span> <span style="color: #010001;">n</span>;</li>
<li> <span style="color: #0000ff;">while</span> (<span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d&#8221;</span>, &amp;<span style="color: #010001;">n</span>) == 1 &amp;&amp; <span style="color: #010001;">n</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">vector</span>&lt;<span style="color: #0000ff;">int</span>&gt; <span style="color: #010001;">V</span>(<span style="color: #010001;">n</span>);</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%d&#8221;</span>, &amp;<span style="color: #010001;">V</span>[<span style="color: #010001;">i</span>]);</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">vector</span>&lt;<span style="color: #010001;">vector</span>&lt;<span style="color: #0000ff;">bool</span>&gt; &gt; <span style="color: #010001;">adj</span>(<span style="color: #010001;">n</span>, <span style="color: #010001;">vector</span>&lt;<span style="color: #0000ff;">bool</span>&gt;(<span style="color: #010001;">n</span>, 0));</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">char</span> <span style="color: #010001;">buf</span>[<span style="color: #010001;">n</span> + 1];</li>
<li> <span style="color: #010001;">scanf</span>(<span style="color: #a31515;">&#8220;%s&#8221;</span>, <span style="color: #010001;">buf</span>);</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">buf</span>[<span style="color: #010001;">j</span>] == <span style="color: #a31515;">&#8217;1&#8242;</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">j</span>] = <span style="color: #0000ff;">true</span>;</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">g</span>.<span style="color: #010001;">clear</span>();</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">i</span> = 0; <span style="color: #010001;">i</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">i</span>) {</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> <span style="color: #010001;">j</span> = 0; <span style="color: #010001;">j</span> &lt; <span style="color: #010001;">n</span>; ++<span style="color: #010001;">j</span>) {</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #010001;">adj</span>[<span style="color: #010001;">i</span>][<span style="color: #010001;">j</span>]) {</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">g</span>.<span style="color: #010001;">insert</span>(<span style="color: #010001;">i</span>, <span style="color: #010001;">j</span>, <span style="color: #010001;">V</span>[<span style="color: #010001;">i</span>] ^ <span style="color: #010001;">V</span>[<span style="color: #010001;">j</span>]);</li>
<li> }</li>
<li style="background: #f3f3f3;"> }</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #010001;">printf</span>(<span style="color: #a31515;">&#8220;%d\n&#8221;</span>, <span style="color: #010001;">g</span>.<span style="color: #010001;">match</span>());</li>
<li> }</li>
<li style="background: #f3f3f3;"> <span style="color: #0000ff;">return</span> 0;</li>
<li>}</li>
</ol>
</div>
</div>
</div>
<p><a href="http://gaoyunxiang.com/wp-content/uploads/2010/04/SPX3W4KSFGGEBSVFXN3WF.jpg"><img style="display: inline; border: 0px;" title="SPX`3W4KSFGGEBS(VFXN3WF" src="http://gaoyunxiang.com/wp-content/uploads/2010/04/SPX3W4KSFGGEBSVFXN3WF_thumb.jpg" border="0" alt="SPX`3W4KSFGGEBS(VFXN3WF" width="585" height="484" /></a></p>
<p>我在公司比较忙，这次出题，其他题目我基本都没有看题意。整体上是xay把握的，所以其他题目的分析我就不说啦。标程和数据过会应该xay他们会发到官方网站上。</p>
<p>从Rank上来看，题目出的有点难了。。虽然我感觉题目和预赛的差不多。。G和H都ac的这么少，实在是出乎意料。</p>
<p>B题xay在赛前跟我说是难题，结果ac的这么多。。</p>
<p>A题xay说是sb题，结果没啥人ac。。</p>
<p>G题我以为会有5-6个队伍ac的。。结果也不对</p>
<p>反正基本没有猜对。。</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=108</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HDOJ Monthly Contest – 2010.04.04 Problem 1003 Point</title>
		<link>http://gaoyunxiang.com/?p=102</link>
		<comments>http://gaoyunxiang.com/?p=102#comments</comments>
		<pubDate>Mon, 05 Apr 2010 03:27:27 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[HDOJ Monthly]]></category>
		<category><![CDATA[二维线段树]]></category>
		<category><![CDATA[计算几何]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=102</guid>
		<description><![CDATA[http://acm.hdu.edu.cn/vip/contest_showproblem.php?pid=1003&#38;cid=276 题目大意就是用下面的距离定义来求每一个点的最近点对。 Distance (A, B) = max (&#124;Ax – Bx&#124;, &#124;Ay – By&#124;) 这题是我最初给我们学校去年的区域赛准备的题目。说一下做法：对于每一个点，先二分答案，这样转化为判断是不是一个正方形内有点的问题。对于解决这个问题，用二维的线段树来解决。很多人对于二维线段树的理解就是把一维变成二维，空间复杂度从O(n)变成O(n^2)。其实不是这样的，复杂度为O(n^2)的线段树基本没有什么用处。 可以用变化一下的实现方法使得空间复杂度变成O(nlogn)。具体的实现方法可以参见我们学校的wiki上我贴的代码。 http://acm.whu.edu.cn/wiki/index.php/Point]]></description>
			<content:encoded><![CDATA[<p>http://acm.hdu.edu.cn/vip/contest_showproblem.php?pid=1003&amp;cid=276</p>
<p>题目大意就是用下面的距离定义来求每一个点的最近点对。</p>
<p>Distance (A, B) = max (|Ax – Bx|, |Ay – By|)</p>
<p>这题是我最初给我们学校去年的区域赛准备的题目。说一下做法：<span id="more-102"></span>对于每一个点，先二分答案，这样转化为判断是不是一个正方形内有点的问题。对于解决这个问题，用二维的线段树来解决。很多人对于二维线段树的理解就是把一维变成二维，空间复杂度从O(n)变成O(n^2)。其实不是这样的，复杂度为O(n^2)的线段树基本没有什么用处。</p>
<p>可以用变化一下的实现方法使得空间复杂度变成O(nlogn)。具体的实现方法可以参见我们学校的wiki上我贴的代码。</p>
<p><a href="http://acm.whu.edu.cn/wiki/index.php/Point">http://acm.whu.edu.cn/wiki/index.php/Point</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=102</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>WHU2010校赛预赛J题：Guard</title>
		<link>http://gaoyunxiang.com/?p=99</link>
		<comments>http://gaoyunxiang.com/?p=99#comments</comments>
		<pubDate>Mon, 05 Apr 2010 03:18:26 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[WHU2010校赛预赛]]></category>
		<category><![CDATA[计算几何]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=99</guid>
		<description><![CDATA[http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&#38;cid=288 题意：给定一个简单多边形，问内部哪个点可以看到的面积最大。（可视范围是已知的R，也就是说，如果没有遮挡，那个可视面积就是一个半径为R的圆） 这题是我出的另一个复杂几何，说一下做法：经过爬山处理之后，就变成了一个纯粹的几何题，问题：给定一个简单多边形，和一个点，问这个点能看到的面积是多大。 我的做法就是把圆和所有的线段离散化。除了他们交点之外还要用到视线的射线来离散化。 离散化之后就是判断每一个单元小块是不是可见的。。麻烦是麻烦了点，但是思路还是挺清晰的。不知道有没有人有兴趣去做做这个题目。]]></description>
			<content:encoded><![CDATA[<p><a href="http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&amp;cid=288">http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&amp;cid=288</a></p>
<p>题意：给定一个简单多边形，问内部哪个点可以看到的面积最大。（可视范围是已知的R，也就是说，如果没有遮挡，那个可视面积就是一个半径为R的圆）</p>
<p>这题是我出的另一个复杂几何，说一下做法：<span id="more-99"></span>经过爬山处理之后，就变成了一个纯粹的几何题，问题：给定一个简单多边形，和一个点，问这个点能看到的面积是多大。</p>
<p>我的做法就是把圆和所有的线段离散化。除了他们交点之外还要用到视线的射线来离散化。</p>
<p>离散化之后就是判断每一个单元小块是不是可见的。。麻烦是麻烦了点，但是思路还是挺清晰的。不知道有没有人有兴趣去做做这个题目。</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=99</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WHU2010校赛预赛G题：Pseudoforest</title>
		<link>http://gaoyunxiang.com/?p=95</link>
		<comments>http://gaoyunxiang.com/?p=95#comments</comments>
		<pubDate>Mon, 05 Apr 2010 03:10:33 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[WHU2010校赛预赛]]></category>
		<category><![CDATA[图论]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=95</guid>
		<description><![CDATA[http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&#38;cid=288 题目大意：给一个图，求这个图的最大伪森林生成树。所谓的伪森林就是图中的任意两个圈都没有公共部分。 这题是我出的，这里说一下做法：从大到小排个序之后用类似Kruskal算法的并查集操作求得答案。对于已经有环的部分，需要做一个标记。 有一个很容易想到的但是是错误的做法：先求最大生成树，然后在每一个联通块里面添加最大边。对于这种数据，这种做法是明显错误的。 A&#8212;B&#8212;-C&#8212;D（AB, BC, CD分别连接） A&#8211;E&#8211;B   C&#8211;F&#8211;D （AE, EB, CF, FD连接） 如果先求得最大生成树，那么最终答案一定有B-C这条边。 但是事实上，我们很容易构造边权，使得ABC和CDF分别连通来构成最大伪森林。（这样就不包含B-C这条边了)]]></description>
			<content:encoded><![CDATA[<p><a href="http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&amp;cid=288">http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&amp;cid=288</a></p>
<p>题目大意：给一个图，求这个图的最大伪森林生成树。所谓的伪森林就是图中的任意两个圈都没有公共部分。<span id="more-95"></span></p>
<p>这题是我出的，这里说一下做法：从大到小排个序之后用类似Kruskal算法的并查集操作求得答案。对于已经有环的部分，需要做一个标记。</p>
<p>有一个很容易想到的但是是错误的做法：先求最大生成树，然后在每一个联通块里面添加最大边。对于这种数据，这种做法是明显错误的。</p>
<p>A&#8212;B&#8212;-C&#8212;D（AB, BC, CD分别连接）</p>
<p>A&#8211;E&#8211;B   C&#8211;F&#8211;D （AE, EB, CF, FD连接）</p>
<p>如果先求得最大生成树，那么最终答案一定有B-C这条边。</p>
<p>但是事实上，我们很容易构造边权，使得ABC和CDF分别连通来构成最大伪森林。（这样就不包含B-C这条边了)</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=95</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WHU2010校赛预赛C题：Ice-sugar Gourd</title>
		<link>http://gaoyunxiang.com/?p=92</link>
		<comments>http://gaoyunxiang.com/?p=92#comments</comments>
		<pubDate>Mon, 05 Apr 2010 02:55:12 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[WHU2010校赛预赛]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=92</guid>
		<description><![CDATA[http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1003&#38;cid=288 题目大意：给一个由两种水果组成的冰糖葫芦，现在需要把这两种水果平均送给两个人。问最少需要切割多少次。（切割不能把水果切开） 这题是我出的，在这里说一下做法：如果能够猜到一个结论：最多需要切割两次。 那这个题就很简单了。。 说一下证明： 这里的证明要用到计算几何里面很重要的一个问题：给平面上的两种点，一定存在一条直线，把这两种点分别均分。 那么怎么应用到我们这个题目里面呢？就是想象把冰糖葫芦弯曲成一个抛物线。根据上面的结论，我们一定可以把这个抛物线用一条直线切割开来。这条直线与抛物线最多有两个交点-.-所以问题得证。。]]></description>
			<content:encoded><![CDATA[<p><a href="http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1003&amp;cid=288">http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1003&amp;cid=288</a></p>
<p>题目大意：给一个由两种水果组成的冰糖葫芦，现在需要把这两种水果平均送给两个人。问最少需要切割多少次。（切割不能把水果切开）</p>
<p>这题是我出的，在这里说一下做法：<span id="more-92"></span>如果能够猜到一个结论：最多需要切割两次。</p>
<p>那这个题就很简单了。。</p>
<p>说一下证明：</p>
<p>这里的证明要用到计算几何里面很重要的一个问题：给平面上的两种点，一定存在一条直线，把这两种点分别均分。</p>
<p>那么怎么应用到我们这个题目里面呢？就是想象把冰糖葫芦弯曲成一个抛物线。根据上面的结论，我们一定可以把这个抛物线用一条直线切割开来。这条直线与抛物线最多有两个交点-.-所以问题得证。。</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=92</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WHU2010校赛预赛B题：fix</title>
		<link>http://gaoyunxiang.com/?p=90</link>
		<comments>http://gaoyunxiang.com/?p=90#comments</comments>
		<pubDate>Mon, 05 Apr 2010 02:43:24 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iproblem]]></category>
		<category><![CDATA[WHU2010校赛预赛]]></category>
		<category><![CDATA[动态规划]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=90</guid>
		<description><![CDATA[题目地址：http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&#38;cid=288 题目意思是告诉很多点（最多18个），然后有一些点是固定住了的，有一些点是没有固定的。现在需要用小木棍连接，使得所有的点都固定住。 问小木棍的总长度最短是多少。 这个题目是我出的，在这里说一下这个题目的做法： 可以用状态压缩的DP来解决这个问题。2^n来表示状态，每一次添加一个点来更新状态。 在这个题目的最初版本里面，对于B&#8211;R&#8211;R&#8211;B这种数据也是属于固定住了的。这是一个很深的Trick，但是想到了之后，却不难解决。只要在DP的拓展状态的时候，加上一个判断，判断是不是有点在当前的小木棍上就可以了。]]></description>
			<content:encoded><![CDATA[<p>题目地址：<a href="http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&amp;cid=288">http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&amp;cid=288</a></p>
<p>题目意思是告诉很多点（最多18个），然后有一些点是固定住了的，有一些点是没有固定的。现在需要用小木棍连接，使得所有的点都固定住。</p>
<p>问小木棍的总长度最短是多少。</p>
<p>这个题目是我出的，在这里说一下这个题目的做法：<span id="more-90"></span></p>
<p>可以用状态压缩的DP来解决这个问题。2^n来表示状态，每一次添加一个点来更新状态。</p>
<p>在这个题目的最初版本里面，对于B&#8211;R&#8211;R&#8211;B这种数据也是属于固定住了的。这是一个很深的Trick，但是想到了之后，却不难解决。只要在DP的拓展状态的时候，加上一个判断，判断是不是有点在当前的小木棍上就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=90</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>推荐一个vim的配色方案desertEx</title>
		<link>http://gaoyunxiang.com/?p=83</link>
		<comments>http://gaoyunxiang.com/?p=83#comments</comments>
		<pubDate>Sun, 14 Feb 2010 13:07:49 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[Iexperience]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[配色方案]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=83</guid>
		<description><![CDATA[可以在这里下载：http://vimcolorschemetest.googlecode.com/svn/colors/desertEx.vim 使用方法： 将文件下载到vim目录下的colors。然后在vimrc里面加入colo desertEx就好了。 感觉比默认的desert清爽一点。 效果图：]]></description>
			<content:encoded><![CDATA[<p>可以在这里下载：<a title="http://vimcolorschemetest.googlecode.com/svn/colors/desertEx.vim" href="http://vimcolorschemetest.googlecode.com/svn/colors/desertEx.vim">http://vimcolorschemetest.googlecode.com/svn/colors/desertEx.vim</a></p>
<p>使用方法：</p>
<p>将文件下载到vim目录下的colors。然后在vimrc里面加入colo desertEx就好了。</p>
<p>感觉比默认的desert清爽一点。</p>
<p>效果图：</p>
<p> <span id="more-83"></span><a href="http://gaoyunxiang.com/wp-content/uploads/2010/02/image6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://gaoyunxiang.com/wp-content/uploads/2010/02/image_thumb6.png" width="543" height="378" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=83</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SRM 461</title>
		<link>http://gaoyunxiang.com/?p=79</link>
		<comments>http://gaoyunxiang.com/?p=79#comments</comments>
		<pubDate>Sun, 14 Feb 2010 07:06:43 +0000</pubDate>
		<dc:creator>momodi</dc:creator>
				<category><![CDATA[IAlgorithm]]></category>
		<category><![CDATA[SRM]]></category>

		<guid isPermaLink="false">http://gaoyunxiang.com/?p=79</guid>
		<description><![CDATA[300P: ColoringRectangle Greedy algorithm works to this problem: After we sort the red disks and blue disks by descending order, the final disk placed order would be determined if we choose one of the largest red and blue disks as the left-most disk, where the red disks alternate with the blue disks. Trick: The disk [...]]]></description>
			<content:encoded><![CDATA[<p>300P:<a href="http://www.topcoder.com/stat?c=problem_statement&amp;pm=10731"> ColoringRectangle</a></p>
<p>Greedy algorithm works to this problem:</p>
<p>After we sort the red disks and blue disks by descending order, the final disk placed order would be determined if we choose one of the largest red and blue disks as the left-most disk, where the red disks alternate with the blue disks.</p>
<p>Trick: The disk cannot be used whose diameter is less the height of the rectangle.</p>
<p>500:<a href="http://www.topcoder.com/stat?c=problem_statement&amp;pm=10732"> BuildingCities</a></p>
<p>Build a graph with at most 50 * 2000 (f[i][j]) vertexes, which means the minimum distance of vertex i which has used j new cities.</p>
<p>Then run shortest path algorithm (SPFA or Dijkstra) on this graph to find the answer.</p>
<p>950: <a href="http://www.topcoder.com/stat?c=problem_statement&amp;pm=10733">FencingGarden</a></p>
<p> <span id="more-79"></span>
<p>&#160;</p>
<p>let Y be the an edge of the rectangular garden which is orthogonal to the wall, and let Y be the edge parallel to the wall.</p>
<p>2X + Y = S (the sum of length of the fence segments)</p>
<p>And we want to the answer of max(X * Y).</p>
<p>We know that max(X * Y) = max(2X * Y) / 2 = S/2 * S/2.</p>
<p>We can divide the segments into two groups, and we enumeration 2^(n/2) to each group, and merge it to find the answer.</p>
<p>We can only cut one segment into two parts, so one of the edges of the rectangle must consist of non-cut segments.</p>
<p><strong>Case 1: one of the orthogonal-to-the-wall edges consists of non-cut segments.</strong></p>
<p>For each combination in a group, if we put it on an edge of orthogonal-to-the-wall ones, we can make sure that the choices of the less of this edge must be leaved to&#160; two combinations in another group as the length of this edge need to be close to S/4. </p>
<p><strong>Case 2: the parallel-to-the-wall edge consists of non-cut segments.</strong></p>
<p>This method is just similar to the method of case 1, but we changed the purpose to find a combination whose length is closed to S/2.</p>
<p>We can use sweeping lines algorithm, and it can run in O(2 ^ 20).</p>
]]></content:encoded>
			<wfw:commentRss>http://gaoyunxiang.com/?feed=rss2&amp;p=79</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
