[CODEFORCES]Good Bye 2014题解

来源:互联网 发布:淘宝站外活动销量 编辑:程序博客网 时间:2024/05/21 14:45

Good Bye 2014

比赛链接在这里
前天打完比赛,看pretest过了4题以为要加分。结果(╯‵□′)╯︵┴─┴,一道WA一道超时。最后我发现自己又逗比了,分别改了一行代码就通过。

A.New Year Transportation [图论]

A题水题。有n个节点,每个节点只有一条连向节点标号更大的有向边,或者没有边。求是否有一条从1到t的路径。
由于图的特殊性,每个节点仅有一条边。只要一直沿着走就可以判断是否能够到达t。

B.New Year Permutation [贪心 图论][floyd]

题目中给了一些数p1,p2,p3,p4..pn,以及一个矩阵A。Aij = 1 表示数pi和pj可以交换。求通过若干次数的交换能够获得的最小的一个排列。
首先想到将Aij看成一个图的邻接矩阵,可以证明,在这个图中,同一个联通分量里面的数可以通过交换任意排列。那么只要求出所有的连通分量,然后对每个连通分量进行排序即可。因为是无向图,联通分量可以使用广搜,或者使用编码最方便的floyd算法。考虑到节点数目比较少,floyd算法可以接受。

C. New Year Book Reading [贪心]

C题贪心还是比较明显的做法。按照第一次拿书的顺序决定书的初始位置。越先拿到的书应该越在上面。
证明我当时想了好一会。注意到如果a书先读而b书后读,那么读b书时一定会拿起a书,这样我们就可以确定一个下界。并且如果按照第一次读到的顺序决定初始位置的话,下界刚好可以达到。因此贪心是正确的。

D. New Year Santa Network [概率 组合 图论][dfs]

D题是一道很有意思的题目。我们可以计算每一条边的期望,然后累加起来就是答案。对于一条边(u,v),在这条边两端的节点数目分别为a和n-a,那么选3个点不在同一边的概率是p = 1-(C(a,3)+C(n-a,3))/C(n,3),如果有一边是2个点一边是1个点,那么这条边会计算两次,所以期望是2*p*w(u,v)。下面就是如何计算a了。
任意选取一个点作为root,在这棵树中,可以递归算出每个节点的子节点有多少个。假设(u,v)是一条边并且u是v的父亲节点。那么两端的节点数目就可以由v的子节点数目+1确定。

E. New Year Domino [线段树 树状数组]

先转换为[pi,pi+li]的线段,题目要求算出从pi到pj,未被覆盖的线段长度是多少,其中pi之前的所有线段不计入。
那么思路就很清晰了。从后向前不断添加线段,然后计算某一区间上未被覆盖的长度有多少。
可以使用线段树或者树状数组。我在CF上发现了两个非常简洁的代码。

F. New Year Running

比赛时没看到这,有时间就补上。

0 0