[bzoj 1124][POI2008] 枪战

Description

有n个人,每个人手里有一把手枪。一开始所有人都选定一个人瞄准(有可能瞄准自己)。然后他们按某个顺序开枪,且任意时刻只有一个人开枪。因此,对于不同的开枪顺序,最后死的人也不同。

Input

输入n人数<1000000 每个人的aim

Output

你要求最后死亡数目的最小和最大可能

Sample Input

8
2 3 2 2 6 7 8 5

Sample Output

3 5

Solution

这道题无非有两种情况:基环树,环。

环的情况,从最小化角度考虑,隔一个枪毙一个,答案就是\left \lceil size-cnt_{leaf} \right \rceil

从最大化角度考虑,只有第一个人没有被杀,其他人倒着杀即可

基环树的情况,从最小化的角度考虑,隔一个一删即可,利用队列进行维护

从最大化角度考虑,把没有被瞄准的人删掉以后一定是一个环,仿上处理即可

判断环利用并查集,时间复杂度O(N+N\alpha(N))

 

发表评论