首页 > 代码库 > Codeforces Round #408 (Div. 2)

Codeforces Round #408 (Div. 2)

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

Codeforces Round #408 (Div. 2)