翠竹叶飞
Hello the cruel world.

A,B 模拟

C (交了2次才过,略微麻烦) 先找性质:树、从点u开始,则初离u距离为1的点+1,其它点均+2

然后大力分类讨论,

1.若只有1个最大值,显然从它开始,再看一看次大值是否会影响答案;

2.若>=2个最大值(=mx),显然答案至于最大值有关,答案为mx+1当且仅当所有最大值的点到某一个点的距离<=1

连成一张菊花图? 一开始就WA在这里,事实上可能是空心的菊花!然后枚举每一个点走一走,判一下。O(n)

+++++++++++++++++++++++++++++++++++++++++++++++++++

其实直接枚举每个点,用Multiset搞一搞就O(n log n)过了啊。我好像写复杂了mmp

 

D 多源点BFS(根本想不到)

题意:n个点的树,k个为黑色,law:任意点距离d内都有黑点,n,k,d<=3e5,问满足law条件下,最多能删除多少条边,使得剩下的森林仍然满足law,并输出删除的边?


由于是树,每删除一条边 都增加一个联通分量,无论d是多少,每个联通分量内都要有一个黑点,所以删除的边不会超过k-1.

一开始已经满足law,任意点到黑点的最短距离<=d.

可以构造k个合法的联通分量:对每个点u,把它加入到和它最近的黑点的联通分量中,黑点距离自己为0,同一个联通分量只有一个黑点,

则每个联通分量中的点到黑点距离都为最短距离<=d 

对所有黑点同时进行bfs,u->v,若v已经被某个黑点访问过,则v,u的最小距离黑点不是同一个,u-v可以删除 

//为什么可以这么做呢、、  大概就是因为一开始law就满足,只需要求出每个点最近的station,而这可以bfs得到。最后得到一些连通块,任一块只有1个station。

==> 最后割的边数==K-1

 

E (dp) 开始想错了,如在A中cheat了[1,3],此时若再在B中[1,3]仍可能有收益。

我们可以用dp[i][j][x][y]来表示前i道题目使用了j次机会,其中person1还可以偷看连续的x道题目,peison2 y道题目。(过去某一题开始偷看,持续到现在,并仍将不断进行)

思路:转移是对于每一道题来,而不是偷看一次转移一下

方程:每一道题开始:看1,看2,都不看(都看是不必考虑的,显然没有分开看优秀)。

O(n*p*k^2) 根据p,k的关系,转化为O(n^2*k); 然后滚动一下数组

这道DP调了好久,细节还是挺多的,感觉放NOIP里我还是会afraid。 1.不可行的状态初始成-inf;每次滚动完也要memset  2.rep(j,0,p)枚举次数!勿忘边界,不要漏。思考清楚。

posted on 2017-05-19 09:03  翠竹叶飞  阅读(151)  评论(0编辑  收藏  举报