codeforces Round#503(div 2)

D、The hat

题意:有2n个学生围成一圈坐着,相邻的两个学生拿到的数字相差1或者-1,让你通过询问,得到那两个学生手里的数字相等。

分析:

 

E、Sergey's problem

题意:给一颗有向树,选出一些顶点集合,使得所有的点在两步之内可达,且两个相邻的点最多选择一个。

分析:一开始我一直在考虑是不是要从入度为0的节点开始,但是遇到复杂的图时,例如环。或者这个图都是一个环,这时候就不好处理了。看了题解,考虑的很巧妙,根据箭头出入点的大小,把图分成正向和反向两部分进行处理,一开始处理正向图(小指向大),顶点从小到大进行遍历,如果这个节点没有被访问过,则标记它指向的正向图中的点。这一步保证了正向图中的点只走一步就能访问到。接下来考虑反向图中,从大到小进行遍历,如果点没有被标记,则加入到结果中,并把它能访问到的点都标记一下。这样被标记的点最多两步可达。要么从结果中的点直接可达,要么是结果中的点到这个点的父节点(比它大的点)可达。

 

你可能感兴趣的:(codeforces)