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)枚举次数!勿忘边界,不要漏。思考清楚。