题目描述

老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业学分为10 ,要求在6 天内交,那么要想拿到这 10 学分,就必须在第 6 天结束前交。

每个作业的完成时间都是只有一天。例如,假设有 7 次作业的学分和完成时间如下:

作业号 期限 学分
 1  1  6
 2
1
 4
 5
 6

最多可以获得 15 学分,其中一个完成作业的次序为 2,6,3,1,7,5,4,注意可能还有其他方法。

你的任务就是找到一个完成作业的顺序获得最大学分。

输入格式

第一行一个整数N ,表示作业的数量;

接下来 N 行,每行包括两个整数,第一个整数表示作业的完成期限,第二个数表示该作业的学分。

输出格式

输出一个整数表示可以获得的最大学分。保证答案不超过 C/C++ 的 int 范围。

样例

样例输入

7
1 6
1 7
3 2
3 1
2 4
2 5
6 1

样例输出

15

数据范围与提示

对于 100% 的数据,N<=1E6,作业的完成期限均小于7E5 。

___________________________________________

这个题和10004是一样的,不同之处只是数据范围大很多。

按照原来的方法,有两个点不过。

加了一个fa[ ]数组,fa[i]表示i点前面一个没有被占用的时间,这样就成为了一片森林。只需要将他想并查集的压缩路径一样维护,就能避免过长的链。

然后就ok了!

___________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e6+10;
4 const int maxm=7e5+10;
5 bool bz[maxm];
6 int n,ans;
7 struct node
8 {
9 int t,v;
10 }sz[maxn];
11 int fa[maxm];
12 bool cmp(node x,node y)
13 {
14 return x.v>y.v;
15 }
16 int find(int x)
17 {
18 if(bz[fa[x]]==0)return fa[x];
19 else return fa[x]=find(fa[x]);
20 }
21 int main()
22 {
23 scanf("%d",&n);
24 for(int i=1;i<=n;++i)scanf("%d%d",&sz[i].t,&sz[i].v);
25 for(int i=1;i<=700000;++i)fa[i]=i;
26 sort(sz+1,sz+1+n,cmp);
27 for(int x,y,i=1;i<=n;++i)
28 {
29 x=sz[i].t;y=sz[i].v;
30 bool bzt=0;
31 int fat=find(x);
32 if(fat!=0)
33 {
34 bzt=1;
35 bz[fat]=1;
36 fa[fat]=fa[fat-1];
37 }
38 if(bzt)ans+=y;
39 }
40 cout<<ans;
41 return 0;
42 }

loj10008家庭作业的更多相关文章

  1. 深入理解计算机系统家庭作业汇总 20135301&&20135328

    深入理解计算机系统家庭作业 深入理解计算机系统第二章家庭作业 题目2.64 题目要求 判断二进制数偶数位是否有任意一位位为1,有的话返回1,否则返回0 解题过程 int any_even_one(un ...

  2. CSAPP深入理解计算机系统(第二版)第三章家庭作业答案

    <深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...

  3. T55359 家庭作业

    传送门 思路: 先按学分从大到小排序,根据贪心的思想尽可能地让作业的完成时间延后,这样就能有更多空间给那些限制比较严格的作业 设 f [ i ] 为点 i 向左的最小空闲时间 对于一个限制 t 的作业 ...

  4. 【u202】家庭作业

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分.每个作业的截止日期 ...

  5. 51nod 1643 小Q的家庭作业

    题意: f(n) = sigma(gcd(i,n))  1 <= i <= n g(n) = sigma(f(d))    d | n n = x1 * x2 * ... * xm 其中 ...

  6. thoughtworks家庭作业C++版本

    商品类: #ifndef ITEM_H_ #define ITEM_H_ class SalesTax; //This represents the Items which don't have an ...

  7. 深入理解计算机系统_3e 第二章家庭作业答案

    初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要 ...

  8. 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework

    8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +---------------- ...

  9. 深入理解计算机系统_3e 第七章家庭作业 CS:APP3e chapter 7 homework

    7.6 +-----------------------------------------------------------------------+ |Symbol entry? Symbol ...

随机推荐

  1. C语言输入字符串

    首先强调一点,C语言没有字符串的概念!所谓的字符串实际上还是以数组形式保存的. 方法1  -- 通过"%s"输入 优点:简单明了,输入字符只要不大于数组长度都可以. #includ ...

  2. sqlite嵌入式数据库简介及特性

    p.p1 { margin: 0; font: 12px "Helvetica Neue"; color: rgba(69, 69, 69, 1) } p.p2 { margin: ...

  3. Linux 网卡 team配置

    网卡 team配置 目录 网卡 team配置 一.介绍 runner 方式: 1.roundrobin [mode 0]轮转策略 (balance-rr) 2.activebackup[mode 1] ...

  4. 第四章节 BJROBOT 线速度校正 【ROS全开源阿克曼转向智能网联无人驾驶车】

    BJROBOT 线速度校正   1.把小车平放在地板上,用卷尺作为测量刻度,选取车头或者车尾处作为小车的起点, 打开资料里的虚拟机,打开一个终端 ssh 过去主控端启动 roslaunch znjro ...

  5. CVE-2021-3019 漏洞细节纰漏

    CVE编号 CVE-2021-3019 lanproxy任意文件读取 该漏洞是2021年比较新的漏洞 是否需要认证:否 是否执行远程代码:否 是否执行远程命令:否 数据读取是否内网:否 漏洞软件介绍 ...

  6. C#扫盲篇(二)依赖倒置•控制反转•依赖注入•面向接口编程--满腹经纶的说

    扫盲系列的文章收到了广大粉丝朋友的支持,十分感谢,你们的支持就是我最大动力. 我的扫盲系列还会继续输出,本人也是一线码农,有什么问题大家可以一起讨论.也可以私信或者留言您想要了解的知识点,我们一起进步 ...

  7. hbase:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet

    hbase连接deug:DEBUG [main-SendThread(bigdata.server1:2181)] - Reading reply sessionid:0x16f764e7f6e000 ...

  8. 【MyBatis】自定义 MyBatis

    自定义 MyBatis 文章源码 执行查询信息的分析 我们知道,MyBatis 在使用代理 DAO 的方式实现增删改查时只做两件事: 创建代理对象 在代理对象中调用 selectList() 配置信息 ...

  9. 如何利用Intellij Idea搭建python编译运行环境 (转)

    首先进入Intellij Idea的官方网站:点击打开链接 点击download,选择旗舰版进行下载.网上的破解教程很多,也可以注册一个学生账号拿到一年的免费试用权. 安装过程不再细说,第一次打开选择 ...

  10. o_direct刷新方式和文件系统支持Direct i/o

    若让innodb使用o_direct刷新方式,文件系统支持Direct i/o 是非常重要的.为啥