【200分】【选举拉票】

【选举拉票】

现在你要竞选一个县的县长。你去对每一个选民进行了调查。
你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。
现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。
请计算一下最少要花多少钱?

第一行有一个整数 n (1 s n s 10^5) ,表示这个县的选民数目。

接下来有n行,每一行有两个整数 ai和bi (0s ais 105:0sbi 104),表示第i选民选的是第 ai号候选人,想要让他选择自己就要花 bi 的钱。你是 0 号候选人 (所以,如果一个选民选你的话 ai 就是 0,这个时候 bi 也肯定是 0)

输入样例

5
1 2
1 2
1 2
2 1
0 0

输出样例

3 

当解决这道选举拉票问题时,可以分为以下几个步骤:

  1. 读取输入: 首先,读取输入的选民数量和每个选民的投票信息,包括选民选择的候选人和改选费用。

  2. 处理数据: 对于每个选民,根据他们选择的候选人和改选费用,将数据整理为一个字典(或列表),其中字典的键是候选人的ID,值是一个列表,表示该候选人名下的选民的改选费用。同时,记录不选自己的选民中最大的改选费用,以及自己胜选所需要的花费。

  3. 构建扫描线矩阵: 为了高效地处理选民的改选费用,需要构建一个扫描线矩阵。这个矩阵按照改选费用

猜你喜欢

转载自blog.csdn.net/weixin_54707168/article/details/132535524
200
今日推荐