报告题目: Assembly and Disassembly of Nanostructures for Stimuli-Responsive Materials
NOI 2008 Day1 解题报告
description
Transcript of NOI 2008 Day1 解题报告
NOI 2008 Day1 解题报告
河南省实验中学 郭家宝
2009.3.6CmYkRgB123http://www.cmykrgb123.cn
概述NOI2008 第一试,于 2008 年 7 月
29 日在绍兴一中举行。这次比赛有三道题,分别为:
假面舞会设计路线志愿者招募
假面舞会
CmYkRgB123http://www.cmykrgb123.cn
题意转述有 N 个人,分为了 k 类,由于戴上了
面具,第 i 类只能看见第 i+1 类人,第k (k>=3) 类可以看见第 1 类人。
给出人数 N ,以及部分关系, (a,b)表示第 a 个人可以看见第 b 个人。
求出最大可能和最小可能的类别数k ,或者判断给出的关系是有误的。
样例解释【输入样例一】
6 51 22 33 44 13 5
【输出样例一】4 4
1 2 3
4 5
6
样例解释【输入样例二】
3 31 22 12 3
【输出样例二】-1 -1
1 2 3
题目分析如果一个人能够看见两个不同的人,
那么这两个人所戴的面具种类一定相同,同样,如果一个人能被两个人看见,这两个人所戴的面具种类也一定相同。
我们把能够推断出的带相同面具的人称为一个类。
题目分析图中可能会有多个连通分量,对于某
个连通分量,如果把边的方向去掉,该连通分量中存在一个无向环,则称该连通分量为环结构,否则称为树结构。
可以发现,一个环结构的连通分量,逐步把一个类的所有顶点收缩为一个顶点,最终一定会剩下一个有向环。
题目分析一个环结构的连通分量,最终有向环
上顶点个数,就是该连通分量的最大类数,而且,最大类数的所有约数也都可以满足该连通分量的类数。
而树结构连通分量,有向树中的最长路径,就是该连通分量的最大类数。
参考算法如果一个顶点向几个顶点有边,或者
几个顶点向一个顶点有边,则称这几个顶点为等位顶点。
算法的基本思想就是收缩等位顶点。1 2
3 4
5
1 2
4
5
1
4
2
收缩 收缩
题目分析如果同时存在树结构和环结构的连通
分量,树结构连通分量可以忽略。如果存在多个环结构连通分量,它们
类数的最大公约数可以就是满足这两个连通分量的最大类数,它们类数的最大公约数的大于等于 3 的最小公约数就是满足这两个连通分量的最小类数。
这样收缩出所有环,算出最大和最小公约数即可。
参考算法如右图,我们
通过收缩等位顶点找出它等价的环。
1 2
5 4
8
6
7
3
参考算法我们首先发现
5 和 6 为等位顶点,收缩5,6 。
1 2
5 4
8
6
7
3
参考算法发现 1,7 为等
位顶点,收缩1,7 。 1 2
4
8
6
7
3
参考算法发现 2,8 为等
位顶点,收缩2,8 。 1 2
4
8
6
3
参考算法此时,已经没有
等位顶点,剩下一个环。长度为5 。
1 2
4
6
3
1
2
46
3
总结这道题在 NOI 的选手中,平均分为
17.5 。不能算太难的题,只是需要冷静深入的分析。
设计路线
CmYkRgB123http://www.cmykrgb123.cn
题意转述某国有一个公路网,每个城市最多只
和一个位于它东边的城市相连。现要将其中一部分改造为铁路。每个
城市都有大量的客流涌向首都,定义某个城市的“不便利值”为从该城市到首都至少要换乘汽车走过的公路条数。整个国家的“不便利值”为所有城市不便利值的最大值。
题意转述请你设计改造方案,使得整个国家的
“不便利值”最小,并求出满足“不便利值”最小的方案个数 mod Q 的值。
题目分析首先,注意一个重要的条件“每个城
市最多只和一个位于它东边的城市相连”,通过这个条件,必须能够明白这个国家的公路网其实是树(或森林)。
假设每个城市东边的城市就是它的父节点,恰好满足是树的条件。
题目分析把城市 1( 首都 ) 当作根节点问题可以
被描述为:给定一个根节点为 1 的数要求在树中
找到一些不相交的链,使得每个节点的不便利值的最大值最小,并求出满足条件的方案个数。一个节点的不便利值就是从该节点到根的路径上经过的非链边的条数。
参考算法考虑第一问,求最小不便利值。可以发现,只有节点个数至少为一个高度为 k+1 的满三叉树,才能使不便利值达到 k 。对于最大的数据N<=100000 ,也不过最多可能有 10层满三叉树,最大达到的不便利值为9 。
参考算法于是可以从 0开始枚举第一问的答案,
计算方案数,直到方案数大于 0 。解决第二问,需要用到树形动态规划。
考虑每个子树根节点向下连边构造不相交链,它向下连边有 3 种可能,不连边,只连一条边,只连两条边。不可能连更多,否则就会出现相交的链,连两条边还必须满足它的父节点没有向它连边。
参考算法F[i,b] 为以 i 为根的子树中,每个节点
相对于子树的根最大不便利值不超过b ,且子树根节点向下连两条边的方案个数。
G[i,b] 为以 i 为根的子树中,每个节点相对于子树的根最大不便利值不超过b ,且子树根节点向下连一条边或不连边的方案个数。
参考算法对于 F[i,b] (b>0)
当 i 有 1 个或 0 个子节点F[i,b]=0
当 i 有至少 2 个子节点F[i,b]=Σ(G[j,b]*G[k,b]*Π(F[l,b-
1]+G[l,b-1])) (j,k,l 为 i 的不同的子节点 )
参考算法对于 G[i,b] (b>0)
当 i 有 0 个子节点G[i,b]=1
当 i 有至少 1 个子节点G[i,b]=Σ(G[j,b]*Π(F[l,b-1]+G[l,b-
1])) + Π(F[l,b-1]+G[l,b-1]) (j,l 为 i的不同的子节点 )
参考算法特殊地,当 b 为 0 时。对于 F[i,b]
当 i 有且只有 2 个子节点F[i,b]=G[j,b]*G[k,b] (j 和 k 为 i 的不
同的子节点 )
当 i 有多于或少于 2 个子节点F[i,b]=0
参考算法对于 G[i,b]
当 i 没有子节点G[i,b]=1
当 i 有且只有 1 个子节点G[i,b]=G[j,b] (j 为 i 的子节点 )
当 i 有多于 1 个子节点G[i,b]=0
参考算法根据上述所有的方程,直接进行树形动态规划,时间复杂度为O(N^3*logN) ,可以拿到 40~50 分。
观察 N 的范围 (N<=100000) ,要想全部通过,必须优化到 O(N*logN) ,向着这个目标,开始着手优化。
具体优化方法请参考我的题解。
总结这是 NOI2008 相对较简单的一道题了,
NOI 上有 6 位大牛拿到了满分,而且平均分高达 21.122 。
但是对于包括我在内的大多数人来说,做出这道题依然很不容易。
志愿者招募
CmYkRgB123http://www.cmykrgb123.cn
题意转述现有一项工程,需要 N天完成,有 M
类志愿者愿意提供帮助。工程第 i天需要的人数至少为 A 。第 i
类志愿者愿意从第 Si天工作到第 Ti天,招募的费用为每人 Ci 。
请你设计一个招募方案,求出完成工程所需的招募费用的最小值。
题目分析这道题正确的解法是构造网络,求网络最小费用最大流,但是模型隐藏得较深,不易想到。构造网络是该题的关键,以下面一个例子说明构图的方法和解释。
题目分析例如一共需要 4天,四天需要的人数依次是 4,2,5,3 。有 5 类志愿者,如下表所示:种类 1 2 3 4 5
时间 1-2 1-1 2-3 3-3 3-4
费用 3 4 3 5 6
题目分析设雇佣第 i 类志愿者的人数为 X[i] ,每
个志愿者的费用为 V[i] ,第 j天雇佣的人数为 P[j] ,则每天的雇佣人数应满足一个不等式,如上表所述,可以列出
P[1] = X[1] + X[2] >= 4P[2] = X[1] + X[3] >= 2P[3] = X[3] + X[4] +X[5] >= 5P[4] = X[5] >= 3
题目分析对于第 i 个不等式,添加辅助变量 Y[i]
(Y[i]>=0) ,可以使其变为等式
P[1] = X[1] + X[2] - Y[1] = 4P[2] = X[1] + X[3] - Y[2] = 2P[3] = X[3] + X[4] +X[5] - Y[3] =
5P[4] = X[5] - Y[4] = 3
题目分析在上述四个等式上下添加
P[0]=0,P[5]=0 ,每次用下边的式子减去上边的式子,得出
① X[1] + X[2] - Y[1] = 4② X[3] - X[2] -Y[2] +Y[1] = -2③ X[4] + X[5] - X[1] - Y[3] + Y[2]
=3④ - X[3] - X[4] + Y[3] - Y[4] = -2⑤ - X[5] + Y[4] = -3
题目分析观察发现,每个变量都在两个式子中
出现了,而且一次为正,一次为负。所有等式右边和为 0 。接下来,根据上面五个等式构图。
每个等式为图中一个顶点,添加源点 S和汇点 T 。
题目分析如果一个等式右边为非负整数 c ,从源点 S 向
该等式对应的顶点连接一条容量为 c ,权值为 0的有向边;如果一个等式右边为负整数 c ,从该等式对应的顶点向汇点 T 连接一条容量为 c ,权值为 0 的有向边。
如果一个变量 X[i] 在第 j 个等式中出现为 X[i] ,在第 k 个等式中出现为 -X[i] ,从顶点 j 向顶点 k连接一条容量为∞,权值为 V[i] 的有向边。
如果一个变量 Y[i] 在第 j 个等式中出现为 Y[i] ,在第 k 个等式中出现为 -Y[i] ,从顶点 j 向顶点 k连接一条容量为∞,权值为 0 的有向边。
题目分析根据上面的例子可以构造出如下网络。
S
1
3
2
4
5
T(4,0)
(3,0)
(∞,3)
(∞,6)
(∞,5)
(∞,4)(∞,3)
(2,0)
(3,0)
(2,0)
题目分析在这个图中求最小费用最大流,流量
网络如下图,每个红色边的流量就是对应的变量 X 的值。
S
1
3
2
4
5
T4
3
4
3
22
3
24
题目分析上面的方法很神奇得求出了结果,思考为什
么这样构图。我们将最后的五个等式进一步变形,得出以下结果
① - X[1] - X[2] + Y[1] + 4 = 0② - X[3] + X[2] + Y[2] - Y[1] - 2 = 0③ - X[4] - X[5] + X[1] + Y[3] - Y[2] + 3
= 0④ X[3] + X[4] - Y[3] + Y[4] - 2 = 0⑤ X[5] - Y[4] - 3 = 0
题目分析可以发现,每个等式左边都是几个变
量和一个常数相加减,右边都为 0 ,恰好就像网络流中除了源点和汇点的顶点都满足流量平衡。每个正的变量相当于流入该顶点的流量,负的变量相当于流出该顶点的流量,而正常数可以看作来自附加源点的流量,负的常数是流向附加汇点的流量。
题目分析因此可以据此构造网络,求出从附加源到附加汇的网络最大流,即可满足所有等式。而我们还要求费用最小,所以要在 X变量相对应的边上加上权值,然后求最小费用最大流。
总结在 NOI 的现场上,该题得分的平均分
12.56 ,只有高逸涵大牛拿到了满分。不能不说这是一道难题,难就难在抽象出问题的数学模型,设计有效的算法。而信息学竞赛正朝着这个方向发展,数学建模将是解决问题的共同关键步骤。
总结
CmYkRgB123http://www.cmykrgb123.cn
总结NOI2008 的题与往年历届的比较,算
是较难的。实际上编程都并不是特别复杂,而主要难在问题的分析和建模上。
通过做这一年的题,我的水平得到了提高,也对 NOI更加了解了。
水平有限,欢迎大家批评指正。
CmYkRgB123http://www.cmykrgb123.cn
欢迎访问http://www.cmykrgb123.cn