B(图论+贪心dp)
给定一张节点数小于1e5的无环无向图,有以下规定:
- 你可以强制monitor任意节点
- 被强制monitor的节点,其相邻节点和对应的连边都会被monitor
- 若一条边被monitor,则其对应的节点也被monitor
- 若一个边的对应两个节点都被monitor,则该边也被monitor
- 若一个节点和k条边相连,若k-1条边都被monitor,则剩下一条边也被monitor
现要求所有的节点和边都被monitor,求最少需要强制monitor多少个节点
正解:复杂的规则+图,考虑用dfs+贪心转移解决
考虑当前节点和其所有子节点、父节点,假设未被monitor子节点数为k
若k>=2,则对当前节点强制monitor能monitor所有子节点和父节点,若不对当前节点强制monitor,则在当前节点不为强制monitor的情况下,想要monitor其子节点,必须强制monitor子节点本身(因为k>=2不能满足规则5使边被monitor),由于k>=2,故此时强制monitor当前节点花费最小且成效最大(父节点也被monitor)
若k==1,则依据规则3、4可知,该子节点的其他边都未被monitor,该子节点和当前节点的连边也未被monitor,当前节点与其父节点的连边monitor后,则该子节点与当前节点的连边也被monitor,则该子节点和该节点的所有边都会被monitor,故我们延后处理(即不做任何处理)
若k==0,则所有子节点都被monitor,如果当前节点也被monitor,则当前节点与父节点的连边,根据规则5,也被monitor,再根据规则3,当前节点的父节点也一定会被monitor;如果当前节点没被monitor,则无事发生
1 |
|
在场上的时候没读懂规则3和规则4