- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IOI金牌选手何林论文:SGU219解题报告
题目翻译
SGU219—Synchrograph
题目描述
在系统学中,Petri nets的一种特殊情况经常被纳入考虑范围,这种特殊情况被称为Synchrograph。Synchrograph是一个有向图,每条弧都有一个非负整数权。一个点,如果所有指向它的边都是正数(也就是大于0),这个点就称之为“可燃点”。
对Synchrograph的操作是一轮一轮进行的。在每一轮中,操作者都会随机的选一个“可燃点”进行“燃烧”。所谓燃烧就是:所有指向这个点的弧权都减1,所有从这个点指出去的弧都加1。每一轮之后,“可燃点”根据新的弧权被更新,然后下一轮操作继续进行。
如果存在一个操作序列,使得某个点变成可燃点,那么这个点就称之为“潜在活动点”。
如果经过任意一个操作序列之后,某个点依然是“潜在活动点”,这个点就称之为“活动点”。
输入格式
第一行包含两个整数N和M,分别表示顶点数和弧数(1=n=1000, 1=m=50000)。
接下来M行每行描述一条边。每行三个数,分别表示一条弧的起点、终点和权。所有的权都不超过109。
输出格式
输出包括n行,第i行描述第i个顶点。如果是活动点,就输出1,否则输出0。
样例
Input
6 8 1 2 1 4 3 0 2 4 0 4 3 1 1 6 0 6 3 1 3 2 0 4 5 1000000000
Output
1 0 0 0 0 1
解题报告
Synchrograph解题报告
【题意分析】
如果一个点无论如何也不可能再次变成可燃点,这个点就叫做“冰冻点”。
如果存在一个操作序列,可以把某个点变成“冰冻点”,那么这个点叫做“永久冰冻点”。
如果无论如何也无法把一个点变成“冰冻点”,这个点就是活动点。
题目要求的就是输出哪些是活动点、哪些是永久冰冻点。
【关于一些特殊情况的分析】
首先考虑一个连通的有向无环图。
图中肯定有入度为0的点,这样的点可以看作一个“发动机”。因为这种点永远是可燃点,通过它可以源源不断的给其他的点输送权值,所以叫做“发动机”。
对于任意一个点,总能找到一条从某个“发动机”到它的路径,对路径上的点依次燃烧即可。所以图中的每个点都是活动点。
然后考虑一个圈。设这个圈是a1, a2, …, ak。
如果圈里的每条弧都是0,那么这k个点都是永久冰冻点。因为圈外的点燃烧,对于圈中的弧没有任何影响,而圈中的点至少有一条圈中的0弧将其“冻”住。所以永远也不能打破这个冰冻的状态。
【关于一般性性质的分析】
上面对题目有了一个感性的认识,我们来进一步分性一般性分析。
性质1 永久冰冻点的后继也是永久冰冻点。
证明 设v是永久冻结点,v的后继是u。
因为v是永久冻结点,根据定义,存在一个序列A,把v变成冻结点。执行A后v永远不可能燃烧了。
注意v, u这条边。因为v不可能再燃烧,所以v, u永远不可能增加。
如果此时的u不是冻结点,那么就必然存在序列使得u燃烧;燃烧之后如果还没冻结,那么就继续燃烧……如此燃烧下去。
因为每次燃烧v, u都至少减少1,不可能增加;同时v, u是有限的,所以经过若干次操作后,v就不可能再操作了。
所以u肯定也是永久冻结点。
证毕。
零圈肯定是永久冻结电,然后其后继也可以确定为永久冻结点。
通过性质1,我们把很大一部分确定为“永久冰冻点”了。可以把这些点从图中删除了(因为他们不指向任何非永久冰冻点,对他们进行操作是不可能也没有必要的)。
下面的讨论中,图中不再存在弧全部为零的圈。
性质2 如果一个点的前趋全部是活动点,那么这个点就是活动点。
证明 设点v的前趋是u1, u2, …, uk。
对于u1,因为是活动点,所以存在序列A1,燃烧u1。如果A1中本身包含了v,那么v就是活动点。否则u1, v通过A1至少在原来的基础上增加1。
对于u2,因为是活动点,所以存在序列A2,燃烧u2。如果A2中本身包含了v,那么v就是活动点。否则u2, v通过A2至少在原来的基础上增加1,并且u1,v不会减少。
……
对于uk,因为是活动点,所以存在序列Ak,燃烧uk。如果Ak中本身包含了v,那么v就是活动点。否则uk, v通过Ak至少在原来的基础上增加1,并且u1, v, u2, v, ……, uk-1, v都不会减少。
最后u1, v, u2, v, ……, uk, v都是非0的数,所以可以燃烧v了。
综上,v肯定可以通过一系列的操作后而燃烧,所以v是活动点。
证毕。
入度为0的点肯定是活动点,通过性质2,图中很大一部分点已经确定为活动点了。但是还有一部分点无法确定。如下图:
红色的点是活动点,其它的点都无法根据性质2确定了。
现在仍然无法确定属性的点就是非零圈(即圈中的弧不全为0)。
性质3 非零圈永远不可能变成全零圈。
证明 燃烧圈外的点对
文档评论(0)