﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Mato is No.1-随笔分类-递推</title><link>http://www.cppblog.com/MatoNo1/category/18799.html</link><description>Mato是一只超级大沙茶……但他一直以来都想成为各项比赛都No.1的神犇……</description><language>zh-cn</language><lastBuildDate>Sat, 03 May 2014 00:00:45 GMT</lastBuildDate><pubDate>Sat, 03 May 2014 00:00:45 GMT</pubDate><ttl>60</ttl><item><title>NOI2013 题解&amp;&amp;总结</title><link>http://www.cppblog.com/MatoNo1/archive/2013/07/20/201888.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sat, 20 Jul 2013 15:43:00 GMT</pubDate><guid>http://www.cppblog.com/MatoNo1/archive/2013/07/20/201888.html</guid><description><![CDATA[@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&amp;file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
【Day0】<br />
不说了囧&#8230;&#8230;<br />
<br />
【Day1】<br />
meow：<br />
k=2：先将这N个d维向量组成一个N*d的矩阵A，则A*A<sup>T</sup>&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;(mod 2)就是向量i&#8226;向量j(mod 2)，因此问题有解当且仅当A*A<sup>T</sup>不是全1。<br />
随机1*N的向量v，看(v*A)*A<sup>T</sup>是否等于v*(N*N的全1矩阵)，如果A*A<sup>T</sup>不是全1那么期望试两次就可以得到不等的结果。（如果试了10次都是相等，就视为无解）<br />
如果两边的乘积不等，则找到那个不等的列，设为第i列，则必然存在一个解包含向量i，枚举另一个即可。时间复杂度O(Nd)<br />
k=3：计算(A*A<sup>T</sup>)&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;<sup>2</sup>(mod 3)，即(&#931;(x<sub>ik</sub>*x<sub>jk</sub>))<sup>2</sup>，即&#931;(x<sub>ik1</sub>*x<sub>ik2</sub>*x<sub>jk1</sub>*x<sub>jk2</sub>)(mod 3)，对每个向量构造一个d<sup>2</sup>维向量，为之前的每个向量各维两两相乘的结果，则转化为k=2的情况（只不过将mod 2改为mod 3），时间复杂度O(Nd<sup>2</sup>)，常数小一点（比如少算mod）可以卡过去。<br />
<br />
count：<br />
（正解需要某些很奇怪的性质，本沙茶看不出来，只会85分的）<br />
递推，设F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;和G&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;表示某层是BFS序列的&amp;e1;i..j&amp;e3;这一段，树的总高度和树的棵数（所求平均值即为F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3; / G&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;）。<br />
则枚举k，若k<strong><span style="&quot;color:"  red;&quot;="">满足一定条件</span></strong>，则F&amp;e1;j+1&amp;e3;&amp;e1;k&amp;e3;+=F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;+G&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;，G&amp;e1;j+1&amp;e3;&amp;e1;k&amp;e3;+=G&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;。<br />
问题是这个&#8220;一定条件&#8221;是什么（最难搞的地方囧）<br />
第零，BFS&amp;e1;j+1..k&amp;e3;这一段的各个结点在DFS序列中的位置递增（这个很显然）。<br />
第一，BFS&amp;e1;j+1..k&amp;e3;这一段的各个结点在DFS序列中的位置之前都必须有在BFS&amp;e1;i..j&amp;e3;范围内的结点，作为它的父结点（这个也很显然）；<br />
第二，DFS序列中，所有在BFS&amp;e1;i..j&amp;e3;范围内的结点的下一个位置如果不是在BFS&amp;e1;0..i-1&amp;e3;范围内的，就必须是BFS&amp;e1;j+1..k&amp;e3;范围内的，因为这表示它的第一个子结点（这个灰常难想到！！！！！！！！！！！！！！！本沙茶就挂在这里了囧&#8230;&#8230;）<br />
对于第零和第一，实际上是给出了k的上限，枚举k时不符合这个条件则退出，而第二则是给出了k的下限（所有的&#8220;下一个位置&#8221;要填满才能算）；<br />
此外，F和G要用long double（double也会爆，不用担心精度，本沙茶当时还在如何维护平均值的问题上纠结了很久&#8230;&#8230;）<br />
这个做法是O(N<sup>3</sup>)的，但加上那些优化就可以85分了囧&#8230;&#8230;<br />
（本沙茶当时想到这个做法了，也想到了第零和第一，但木有想到第二，结果挂了&#8230;&#8230;要是真得到85分，总分254，稳的rank1了&#8230;&#8230;真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧，真悲剧&#8230;&#8230;）<br />
<br />
train：<br />
史上最水的提交答案&#8230;&#8230;整个就是个NOIP普及组难度的题&#8230;&#8230;<br />
首先分析数据就不难发现这10个点其实是一种模型：<br />
一开始有若干元钱（用变量v 2表示）。<br />
有若干个大块，每个大块可以选择进或者不进，如果进，就要付出一些钱，如果不进，就自动跳转到后面的某个大块。<br />
在每个大块里有若干个（不超过25个）小块，有1或10个变量，每个小块也可以选择要或者不要，如果要，就对所有的变量各加上一个效果值（可正可负）。<br />
目标是所有变量的绝对值之和最大（每个大块末尾会结算一次，然后将所有变量的值清零）<br />
首先每个大块内选哪些小块可以暴力枚举，然后得到最大的总绝对值，设为val&amp;e1;i&amp;e3;（i为大块编号），设如果不进第i个大块，跳到的大块编号为B&amp;e1;i&amp;e3;，第i个大块付出的钱为V&amp;e1;i&amp;e3;。<br />
而大块之间就是一个类似于01背包的模型，设F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;表示到达第i个大块（尚未作出选择）时，用掉了j元钱的最大总效果值，用F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;更新F&amp;e1;B&amp;e1;i&amp;e3;&amp;e3;&amp;e1;j&amp;e3;，若不超过一开始的总钱数则用F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;+val&amp;e1;i&amp;e3;更新F&amp;e1;i+1&amp;e3;&amp;e1;j+V&amp;e1;i&amp;e3;&amp;e3;，要实时保存最优决策。<br />
输出的时候注意一下，那里面有几个点，当钱不够时会自动选择不进当前大块，木有必要作出选择了。<br />
<br />
至此Day1完挂。<br />
<br />
【Day2】<br />
matrix：<br />
矩阵乘法，十进制快速幂。没了。<br />
<br />
penman：<br />
比较猥琐的DP题&#8230;&#8230;<br />
重点是这个：所有的图形都可以拆成单列，一列一列地弄（本沙茶太弱了，这个都木有想起来），然后就是三维DP。<br />
N：设F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;&amp;e1;k&amp;e3;&amp;e1;st&amp;e3;表示第i列，上下边界分别为j、k行，状态为第st个部分（第0部分为最左边一竖，第1部分为中间若干块，第2部分为最右边一竖）的最优解，计算好一列之后求出一大堆辅助值，就可以使下一列O(1)算出了。<br />
I：设F&amp;e1;i&amp;e3;&amp;e1;j&amp;e3;&amp;e1;k&amp;e3;&amp;e1;st&amp;e3;表示第i列，上下边界分别为j、k行，状态为第st个部分（第0部分为那一竖的左边，第1部分为那一竖，第2部分为那一竖的右边）的最优解，不需要辅助值，直接求即可；<br />
O：可以DP，但更好的办法是枚举左、右、上边界，然后扫描，说它更好是因为知道了左右边界，可以直接引出左边的N和右边的I的最优解。<br />
具体实现的时候细节很多&#8230;&#8230;真折磨人。还有要注意为节省空间，F数组要对i这一维滚动。<br />
<br />
foodshop：<br />
首先这是个无向环套树（关于这方面的总结见<a title="&quot;这里&quot;" href="&quot;http://www.cppblog.com/MatoNo1/archive/2012/09/01/189006.html&quot;">这里</a>）<br />
枚举开店的那条边，如果是树边，求出该边的较下结点往下的最大长度dist1，以及往其它结点的最远距离dist2，则结果即为min{dist1+x, dist2+L-x}，满足0&lt;=x&lt;=L，L为该边长度。dist1求法不说了，dist2分为两部分，树内的，可以转化为经典DP模型&#8220;树的中心点&#8221;；树外的，先求出环上的每个结点往树中走的最大长度，作为这个结点的权值，然后就转化为一个带边权和点权的环，对于每个点i，求出max{i、j距离+j的权值}（j为环上的点）的值，这个值可以通过在环上扫描的方法求出：设G&amp;e1;i&amp;e3;为第i个点出发，逆时针走更优的位置最远到哪里。逆时针扫描这个环，然后所有的G就可以在线性时间内求出，求出G后，对每个点分别求出其逆时针更优区与顺时针更优区内的最大值（可以在扫描过程中用线段树维护），即可解决这个问题。<br />
如果开店的边在环上，设其两端点为i、j（i-&gt;j为逆时针方向）。很容易发现，如果在这条边上开店，则j的逆时针更优区内的所有点一定是逆时针到这个店更近，i的顺时针更优区内的所有点一定是顺时针到这个店更近，而其它的点则需要额外判断一下是顺时针更近还是逆时针更近（总判断次数为线性）。这样也可以借助线段树在扫描过程中求出每条环边的顺、逆时针更优区，从而转化为与树边的问题一样的模型。时间复杂度O(NlogN)。<br />
不过，对于环边，还有一种更简单的做法（Orz @hza）：<br />
二分最远距离（即结果）D，然后对于环上的所有点，找到这个环上到这个点距离大于（D-这个点树里的最大深度）的点集合（显然是连续的一段弧），对所有点的这种弧求并，如果能覆盖整个环，则最优解&lt;D，否则最优解&gt;=D。<br />
<br />
本沙茶Day2全暴力，只拿了暴力分&#8230;&#8230;对付繁琐题的能力太弱了，代码量一大就悲剧&#8230;&#8230;<br />
（后来发现，foodshop的暴力都写疵了囧&#8230;&#8230;枚举开店的边后应该用SPFA求最短路，因为删掉的可能是树边，剩下的不是树&#8230;&#8230;不过数据弱，木有出现这种情况囧&#8230;&#8230;）<br />
<br />
至此NOI2013完挂。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
【总结 &amp;&amp; 一些感想】<br />
从上面可以看出，本沙茶在NOI2013中使用的算法都是NOIP普及组以内难度的囧（matrix的矩阵乘法可能略高级一些，但显然也不能超过NOIP难度）&#8230;&#8230;<br />
这些算法都是本沙茶在2009年以前就搞懂的，也就是说，后4年掌握的所有算法，这次都木有用上&#8230;&#8230;<br />
最后一次NOI，竟如此富有戏剧性&#8230;&#8230;居然只考普及组算法&#8230;&#8230;<br />
图论、高级数据结构、字符串、几何、数论、组合&#8230;&#8230;这次都木有考，这也是NOI历史上的一个&#8220;创举&#8221;了囧&#8230;&#8230;<br />
但尽管如此，本沙茶在此次NOI中仍然暴露出了诸多问题&#8230;&#8230;并不是比赛技巧问题，而是平时埋下的祸根&#8230;&#8230;<br />
想题不够灵活，找不出题目隐藏的特殊性质，特殊情况考虑不清楚，写代码速度太慢&#8230;&#8230;这些都是平时不好好做题，天天颓废的结果&#8230;&#8230;<br />
因此，这次挂掉，也是理所应当的事&#8230;&#8230;<br />
<div><strong><span style="&quot;color:"  red;&quot;="">遗失了过去，因此，现在后悔了&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</span></strong><br />
<br />
不过，不管肿么讲，还是混进了集训队&#8230;&#8230;集训队是一个新的开始，每天都面临巨大的挑战，同时每天都能得到巨大的提高&#8230;&#8230;<br />
虽然本沙茶现在很弱，应付难题的能力还远远不够，但经过这一年的训练，相信可以改变这一切，尽快脱菜&#8230;&#8230;<br />
希望这能是一个转折点。<br />
<strong><span style="&quot;color:"  red;&quot;="">50，12，6，4，1。</span></strong><br />
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</div>
膜拜本次虐场神犇<br />
@鼎爷<br />
@xudyh<br />
@xyz111<br />
@hzaskywalker(FFT)<br />
@hzhwcmhf<br />
@zhj<br />
@鱼丸<br />
@sunzhouyi<br />
以及众多虐掉count、penman、foodshop的神犇&#8230;&#8230;</div>
<div></div><img src ="http://www.cppblog.com/MatoNo1/aggbug/201888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MatoNo1/" target="_blank">Mato_No1</a> 2013-07-20 23:43 <a href="http://www.cppblog.com/MatoNo1/archive/2013/07/20/201888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【AHOI2013复仇】NOI2012 park 一种巨另类的做法</title><link>http://www.cppblog.com/MatoNo1/archive/2012/09/08/189952.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sat, 08 Sep 2012 11:27:00 GMT</pubDate><guid>http://www.cppblog.com/MatoNo1/archive/2012/09/08/189952.html</guid><wfw:comment>http://www.cppblog.com/MatoNo1/comments/189952.html</wfw:comment><comments>http://www.cppblog.com/MatoNo1/archive/2012/09/08/189952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MatoNo1/comments/commentRss/189952.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MatoNo1/services/trackbacks/189952.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原题地址这个算法是由本沙茶在现场使用的那个做法扩展得来的&#8230;&#8230;其实AC不了，后两个点会因为常数过大而T掉&#8230;&#8230;但在BZOJ上算总时间的话能AC&#8230;&#8230;首先考虑树的情形。设F[i]为从点i开始，往子树i里面走，到达叶结点的期望长度，则很容易得到递推公式：F[i] = (&#931;F[j] + W(i, j)) / K，其中j是i的子结...&nbsp;&nbsp;<a href='http://www.cppblog.com/MatoNo1/archive/2012/09/08/189952.html'>阅读全文</a><img src ="http://www.cppblog.com/MatoNo1/aggbug/189952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MatoNo1/" target="_blank">Mato_No1</a> 2012-09-08 19:27 <a href="http://www.cppblog.com/MatoNo1/archive/2012/09/08/189952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发现了一道巨神无比的递推题</title><link>http://www.cppblog.com/MatoNo1/archive/2012/03/12/167740.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Mon, 12 Mar 2012 15:30:00 GMT</pubDate><guid>http://www.cppblog.com/MatoNo1/archive/2012/03/12/167740.html</guid><wfw:comment>http://www.cppblog.com/MatoNo1/comments/167740.html</wfw:comment><comments>http://www.cppblog.com/MatoNo1/archive/2012/03/12/167740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MatoNo1/comments/commentRss/167740.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MatoNo1/services/trackbacks/167740.html</trackback:ping><description><![CDATA[<a title="COCI 2011~2012 #2 funkcija" href="http://www.hsin.hr/coci/">COCI 2011~2012 #2 funkcija</a><br />其思想的巧妙程度以及各种细节的处理难度远超AHOI2009的cchess（以前本沙茶总以为这种才是最神的递推题囧&#8230;&#8230;）<br /><br />具体的题解以及方法归纳以后再写，先上代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdlib.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;re(i,&nbsp;n)&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;n;&nbsp;i++)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;re1(i,&nbsp;n)&nbsp;for&nbsp;(int&nbsp;i=1;&nbsp;i&lt;=n;&nbsp;i++)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;re2(i,&nbsp;l,&nbsp;r)&nbsp;for&nbsp;(int&nbsp;i=l;&nbsp;i&lt;r;&nbsp;i++)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;re3(i,&nbsp;l,&nbsp;r)&nbsp;for&nbsp;(int&nbsp;i=l;&nbsp;i&lt;=r;&nbsp;i++)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;rre(i,&nbsp;n)&nbsp;for&nbsp;(int&nbsp;i=n-1;&nbsp;i&gt;=0;&nbsp;i--)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;rre1(i,&nbsp;n)&nbsp;for&nbsp;(int&nbsp;i=n;&nbsp;i&gt;0;&nbsp;i--)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;rre2(i,&nbsp;r,&nbsp;l)&nbsp;for&nbsp;(int&nbsp;i=r-1;&nbsp;i&gt;=l;&nbsp;i--)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;rre3(i,&nbsp;r,&nbsp;l)&nbsp;for&nbsp;(int&nbsp;i=r;&nbsp;i&gt;=l;&nbsp;i--)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;ll&nbsp;long&nbsp;long</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAXN&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">27</span><span style="color: #000000; ">,&nbsp;MAXM&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100010</span><span style="color: #000000; ">,&nbsp;MOD&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1000000007</span><span style="color: #000000; ">,&nbsp;INF&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; ">0U</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;edge&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;b,&nbsp;pre,&nbsp;next;<br />}&nbsp;E[(MAXN&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,&nbsp;m,&nbsp;A[MAXN][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];<br />ll&nbsp;F[MAXN][MAXM],&nbsp;G[MAXN][MAXM],&nbsp;res;<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init_d()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;re1(i,&nbsp;n)&nbsp;E[i].pre&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;E[i].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;&nbsp;m&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;add_edge(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;E[m].a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a;&nbsp;E[m].b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;b;&nbsp;E[m].pre&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;E[a].pre;&nbsp;E[m].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a;&nbsp;E[a].pre&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;m;&nbsp;E[E[m].pre].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;m</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;ss0[</span><span style="color: #000000; ">20</span><span style="color: #000000; ">],&nbsp;ss1[</span><span style="color: #000000; ">20</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re1(i,&nbsp;n)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s&nbsp;%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;ss0,&nbsp;ss1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ss0[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">48</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;ss0[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">57</span><span style="color: #000000; ">)&nbsp;A[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;atoi(ss0);&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;A[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">96</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;ss0[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ss1[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">48</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;ss1[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">57</span><span style="color: #000000; ">)&nbsp;A[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;atoi(ss1);&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;A[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">96</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;ss1[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_d();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re1(i,&nbsp;n)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(A[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;add_edge(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">A[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">],&nbsp;i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(A[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;add_edge(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">A[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;solve()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;y,&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rre1(i,&nbsp;n)&nbsp;re2(j,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;MAXM)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;p</span><span style="color: #000000; ">=</span><span style="color: #000000; ">E[i].next;&nbsp;p&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;i;&nbsp;p</span><span style="color: #000000; ">=</span><span style="color: #000000; ">E[p].next)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;E[p].b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(A[x][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(A[x][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;j)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;G[x][A[x][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;G[x][j&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tmp&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;tmp&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;F[i][j]&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{F[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(A[x][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;j)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;G[x][j]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;G[x][A[x][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tmp&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;tmp&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;F[i][j]&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{F[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(G[i][j&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;F[i][j])&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;re1(i,&nbsp;n)&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(A[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;A[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;G[i][A[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;G[i][A[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tmp&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;tmp&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;res&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;pri()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;res&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;solve();<br />&nbsp;&nbsp;&nbsp;&nbsp;pri();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><img src ="http://www.cppblog.com/MatoNo1/aggbug/167740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MatoNo1/" target="_blank">Mato_No1</a> 2012-03-12 23:30 <a href="http://www.cppblog.com/MatoNo1/archive/2012/03/12/167740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>