Voting【Codeforces 1251 E1 && E2】【贪心】

2023-11-07

Educational Codeforces Round 75 (Rated for Div. 2) E2


Now elections are held in Berland and you want to win them. More precisely, you want everyone to vote for you.

There are ?n voters, and two ways to convince each of them to vote for you. The first way to convince the ?i-th voter is to pay him ??pi coins. The second way is to make ??mi other voters vote for you, and the ?i-th voter will vote for free.

Moreover, the process of such voting takes place in several steps. For example, if there are five voters with ?1=1m1=1, ?2=2m2=2, ?3=2m3=2, ?4=4m4=4, ?5=5m5=5, then you can buy the vote of the fifth voter, and eventually everyone will vote for you. Set of people voting for you will change as follows: 5→1,5→1,2,3,5→1,2,3,4,55→1,5→1,2,3,5→1,2,3,4,5.

Calculate the minimum number of coins you have to spend so that everyone votes for you.

Input

The first line contains one integer ?t (1≤?≤2⋅1051≤t≤2⋅105) — the number of test cases.

The first line of each test case contains one integer ?n (1≤?≤2⋅1051≤n≤2⋅105) — the number of voters.

The next ?n lines contains the description of voters. ?i-th line contains two integers ??mi and ??pi (1≤??≤109,0≤??<?1≤pi≤109,0≤mi<n).

It is guaranteed that the sum of all ?n over all test cases does not exceed 2⋅1052⋅105.

Output

For each test case print one integer — the minimum number of coins you have to spend so that everyone votes for you.


  题意:有N个人,他们都是投票的人,我们现在想的就是让这N个人都把票投给自己,第i个人有一个mi和pi指的是,如果有mi个人已经把票投给你了,那么他也会把票投给你,否则你可以花费pi让他把票投给你。为了让所有的人都把票投给你,问你需要的最少花费是多少?

  思路:我们从后往前看,因为0≤M≤N,所以我们从N反过来枚举所有的M,N、N-1、N-2……、i、…… 、0,如果现在是遍历到了i,那么如果我们要去贪心的选择的话,就是要让在目前的已选人数必须要求"≥i"才行,那么也就是说在待选区域的人数size应该满足 N - size ≥ i 才行。

  话说回来,我们现在还没有处理pi,pi的处理其实就好的多了,我们可以用贪心的办法解决,如果说 N - size < i,那么,我们的size一定是偏大了,我们就可以去把偏大的部分给买通了,这时候就可以用优先队列去找这size里面的最小p值即可。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 2e5 + 7;
int N;
vector<int> vt[maxN];
int main()
{
    int T; scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &N);
        for(int i=0; i<=N; i++) vt[i].clear();
        for(int i=1, m, p; i<=N; i++) { scanf("%d%d", &m, &p); vt[m].push_back(p); }
        priority_queue<int, vector<int>, greater<int>> Q;
        ll ans = 0;
        for(int i=N; i>=0; i--)
        {
            int len = (int)vt[i].size();
            for(int j=0; j<len; j++) Q.push(vt[i][j]);
            while(Q.size() > N - i) { ans += Q.top(); Q.pop(); }
        }
        printf("%lld\n", ans);
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Voting【Codeforces 1251 E1 && E2】【贪心】 的相关文章

  • 【NOIP 2004 提高组】合并果子

    题就自己找啦 各大OJ上应该都有 题目 题目描述 在一个果园里 多多已经将所有的果子打了下来 而且按果子的不同种类分成了不同的堆 多多决定把所有的果子合成一堆 每一次合并 多多可以把两堆果子合并到一起 消耗的体力等于两堆果子的重量之和 可以
  • 【二分+贪心】用 N 根绳子裁剪出 M 根等长绳子

    有 N 根绳子 第 i 根绳子的长度为 l i 现在需要 M 根等长的绳子 你可以对这 N 根绳子进行任意裁剪 不能拼接 请你计算出这 M 根绳子最长的长度 输入描述 第一行包括两个整数 N M 含义如题所述 1 lt N M lt 100
  • Array merging

    Array merging 题意 给出两个长度为n的数组a b 现在每次可以取出任意一个数组的第一个元素 放到c数组的后面 c数组一开始为空 求c数组连续相等的最长子串长度 思路 这里可以用两个map把a b数组每个元素对应的连续相等的最长
  • Petya and Exam【Codeforces 1282 C】【贪心】

    Codeforces Round 610 Div 2 C 有N道题目 题目有简单与困难之分 简单的题目花费A分钟 困难的题目花费B分钟 那么考试时间一共有T的情况下 我们是可以提前交卷的 但是有些时间限制 就是譬如说你现在第x分钟交卷 但是
  • New Year and Social Network【Hello 2020 F】【拓扑+LCA+贪心】

    题目链接 看到比赛的时候zzq大聚聚用了LCT做的 在线 首先 我们可以发现 两棵大小相同 构造形状不同的树 一定是可以用另一棵树的边来维持这棵树上的每一个点的相互连通性的 我的做法 就是基于这样展开的 我们有T1 T2两棵树 现在我们要去
  • codeforces Gym 101341 K Competitions

    Problem codeforces com gym 101341 problem K vjudge net contest 162325 problem K Meaning 有 n 场比赛 每一场有 开始时间 a 结束时间 b 价值 c
  • Codeforces Round #364 (Div. 2)【贪心、数学、尺取】

    Codeforces 701 A Cards 直接贪心即可 写法各异 include
  • NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)

    疯牛 时间限制 1000 ms 内存限制 65535 KB 难度 4 描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000
  • Bracket Coloring

    Bracket Coloring 题意 给出一个括号序列 定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列 现在要求染色 使得相同颜色的括号组成漂亮序列 问最少需要多少种颜色即每个括号染的颜色 思路 这里可以用栈来匹配括号序列 因
  • Daniel and Spring Cleaning【数位DP】【Codeforces 1245 F】

    Codeforces Round 597 Div 2 F 这道题化简一下就是让我们求有上下限的2进制数中有几对满足每一位的相 值不为1的对数 那么 首先看到这个1e9就会让人想到数位DP 然后接着就是如何去求的这样一个问题 我们不如将上下限
  • 2605. 从两个数字数组里生成最小数字

    文章目录 Tag 题目来源 题目解读 解题思路 方法一 枚举比较法 方法二 集合的位运算表示法 写在最后 Tag 贪心 位运算 数组 题目来源 2605 从两个数字数组里生成最小数字 题目解读 给定两个各自只包含数字 1 到 9 的两个数组
  • 1400*C. No Prime Differences(找规律&数学)

    解析 由于 1 不是质数 所以我们令每一行的数都相差 1 对于行间 分为 n m之中有存在偶数和都为奇数两种情况 如果n m存在偶数 假设m为偶数 如果都为奇数 则 include
  • 1096C - Polygon for the Angle-几何-性质

    思路 根 据 几 何 性 质 正 多 边 形 所 有 三 个 点组成的 角 都 是最小角的倍数 然后根据内角公式 可以求出 正多边形 最小角为 多边形内角 n 2 然后 打表发现 180边形最小角为1 最大角 178 所以 只有 179无法
  • 1500*B. Coloring(找规律&鸽巢原理)

    include
  • codeforces 733D--Kostya the Sculptor

    Description Kostya is a genial sculptor he has an idea to carve a marble sculpture in the shape of a sphere Kostya has a
  • HDU--1050:Moving Tables (贪心)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1050 2 解题思路 将每个输入的起始房间和结束房间转换为房间前面的区间 按区间起始位置从小到大排序 首先取第一个区间 后续如果有区间的起始位
  • BZOJ4868 [Shoi2017]期末考试

    YY一下的话感觉代价关于最晚出分时间是一个单峰函数 三分最晚的出分时间 然后贪心一下算代价就行 如果A gt B就只用B就行了 要不然的话出分时间小于当前限制的都可以随便往后调直到到达限制 那么先尽量用A 调不到限制以内的再用B即可 inc
  • 1600*D. Road Map(数学

    解析 记录每个点的父节点和子节点 从新的根节点开始遍历 遍历所有的非父结点即可 include
  • Fix a Tree【Codeforces 699 D】【dfs + 树的性质】

    Codeforces Round 363 Div 2 D 题意 有N个点 每个点i都有一个父节点p i 如果 i p i 则是说明i结点是根结点 现在我们给出这样的1 N的p i 这可能是不合法的 问 我们应该最少改变多少个使它变成一棵合法
  • gym 101512 BAPC 2014 I Interesting Integers

    Problem codeforces com gym 101512 attachments vjudge net contest 186506 problem I Meaning 给出一个 正整数 n 要找尽量小的 a 和 b a lt b

随机推荐

  • (18)语义分割--paddle--EISeg自动标注软件的使用和自己数据集的测试

    1 主要参考 1 使用过程 建议先看一下下面博主的视频 eiseg简单教学 哔哩哔哩 bilibili 2 软件使用 主要参考 百度飞浆EISeg高效交互式标注分割软件的使用教程 Leonard2021的博客 CSDN博客 安装eiseg
  • redis命令行操作五种数据类型

    这里写目录标题 1 redis有关key的操作命令 2 redis中关于string类型数据的操作命令 3 redis中关于list类型数据的操作命令 单key 多valu有序 4 redis中关于set类型数据的操作命令 单key 多va
  • 高数【连续、间断点】--猴博士爱讲课

    第二课 连续 间断点 函数连续不连续是要看区间的 1 3 证明f x 在某点连续 例一 试证明 f x
  • 蓝桥杯真题31日冲刺国一

    大家好 我是泡泡 接下来几天每天都有复习 目录 今日练习专题 一丶成绩统计 二丶既约分数 三丶最优包含 复习专题 一丶空间 二丶等差数列 三丶回文日期 四丶青蛙跳杯子 今日练习专题 一丶成绩统计 题目链接 成绩统计 蓝桥云课 lanqiao
  • 机器学习中如何选择分类器

    在机器学习中 分类器作用是在标记好类别的训练数据基础上判断一个新的观察样本所属的类别 分类器依据学习的方式可以分为非监督学习和监督学习 非监督学习顾名思义指的是给予分类器学习的样本但没有相对应类别标签 主要是寻找未标记数据中的隐藏结构 监督
  • C#实现的根据年月日计算星期几的函数

    算法如下 基姆拉尔森计算公式 W d 2 m 3 m 1 5 y y 4 y 100 y 400 mod 7 在公式中d表示日期中的日数 m表示月份数 y表示年数 注意 在公式中有个与其他公式不同的地方 把一月和二月看成是上一年的十三月和十
  • pandas 报警告:A value is trying to be set on a copy of a slice from a DataFrame

    pandas 报警告 A value is trying to be set on a copy of a slice from a DataFrame 我在抽取了原来DataFrame数据的几列后 对抽取后的数据进行赋值操作时弹出这个警告
  • 提取分割单引号 ‘ ‘ 之间的内容且不重复分割单引号 python

    分割两个单引号之间的内容 且不重复分割已使用的单引号 废话少说 直接上干货 import re result re findall string 将string替换为你需要分割的部分 示例代码 string jmp qword ptr ri
  • MySQL - Left Join和Inner Join的效率对比,以及优化

    最近在写代码的时候 遇到了需要多表连接的一个问题 初始sql类似于 select from a left join b on a id b aid left join c on c bid b id left join d on d cid
  • 什么是DI

    Spring致力于简化java企业级开发 促进代码松耦合 成功的关键在于依赖注入和AOP Spring通过应用上下文 Application Context 装载bean的定义并把他们组装起来 Spring应用上下文全权负责对象的创建和组装
  • python3发送邮件带附件,Python3.4 邮件发送(含带中文附件)详解

    import smtplib import os from email mime text import MIMEText from email mime multipart import MIMEMultipart from email
  • Xshell使用密钥登录Linux服务器

    1 使用如下命令生成密钥对 root xuegod130 ssh keygen Generating public private rsa key pair Enter file in which to save the key root
  • jsonp 实现跨域 同时也是一个 webflux 的demo 示例

    文章目录 核心原理 代码 html 服务端 java 为例子 服务端目录结构 核心原理 前端 使用js 创建 script 标签 将请求地址 放到其src 中 并将 script 标签追加到文档流 后端 根据约定好的 callback 字段
  • element-ui 首页布局

    效果 代码
  • [python]numpy 中的@运算

    运算其实等价于矩阵乘法 r location s y l location r location 1 np dot s y l location 与上面式子等价
  • java 保留字符串数字的位数,不够前面补0

    Test public void test this printToConsole autoGenericCode 10011 this printToConsole autoGenericCode 000 3 不够位数的在前面补0 保留c
  • 数模笔记——论文写作

    论文写作 各模块写作要点 数学建模论文的重要性 数学建模论文的写作是数学建模中重要的一个环节 数学建模的论文是参赛队工作的全面总结 也是评委评价建模成绩的主要依据 一篇好的论文应该逻辑清晰 在语言表述上清楚 数学符号标记清晰 对于读者或者评
  • 学习JavaScript以及React技术报告

    在学习JS中遇到的一些问题总结 1 我们需要在页面加载时能够通过javascript去动态操作html中的一些对象 对于这些操作 我们最好是在body中定义onload操作 然后在该操作中去完成这些任务 尽量避免在html中嵌入script
  • 操作系统课程设计3_系统调用

    一 实验目的 1 学习怎样重新编译 Linux 内核 2 理解 掌握 Linux 标准内核和发行版本内核的区别 二 实验内容 1 通过重新编译Linux来实现系统调用 2 通过增加模块来实现系统调用 三 实验步骤和结果 一 通过重新编译内核
  • Voting【Codeforces 1251 E1 && E2】【贪心】

    Educational Codeforces Round 75 Rated for Div 2 E2 Now elections are held in Berland and you want to win them More preci