题目传送门

Hotel

题目描述

你经营着一家旅馆,这家旅馆有 n 个房间,每个房间有维护费用和容量。其中第 i 个房间的维护费用为 ci​,容量为 pi​ 人。

现在有 m 个订单,每个订单有两个参数:vi​,di​ ,其中 vi​ 表示这个订单支付的租金,di​​​ 表示人数。

你现在得要合理选择一些订单,并放弃其他订单,使得每个选择的订单被安排在同一间房间内,且人数不超过这个房间的容量限制。当然,两个不同的订单也不能被安排在同一间房间内。

现在你想要知道,在最多选出o 个订单时的最大收益。一个方案的收益的定义为,选出的订单的租金和,减去选出的房间的维护费用和。

输入格式

第一行三个空格隔开的整数n,m,o 。

接下来 n 行,每行两个空格隔开的整数 ci​,pi​。

接下来 m 行,每行两个空格隔开的整数 vi​,di​。

输出格式

一行一个整数表示最大收益。注意答案可能很大。

输入输出样例

输入

3 2 2
150 2
400 3
100 2
200 1
700 3
输出

400

说明/提示

样例 11 解释

可以将第一个订单安排至第三个房间,将第二个订单安排至第二个房间。

数据范围

对于 100% 的数据,有 1≤n,m≤500 000;1≤o≤min(n,m);1≤ci​,pi​,vi​,di​≤109,保证 ∀1≤i,j≤n,若pi​<pj​,则ci​≤cj​。


  分析:

  很容易想到的贪心,优先选择价值大且人数少的订单,对于每一个订单又优先选择容量小且花费小的房间。

  所以先对房间和订单排序,房间按照容量与花费排序,订单按价值和人数排序。然后二分查找找到一个人数足够花费最小的房间,记录得到的收益,然后对所有收益排序取最大的$o$个。

  但问题在于一个房间可能已经被之前的订单占用了,所以用并查集维护一下,如果一个房间$x$被使用了,就令$fa[x]$等于$x-1$,因为显然这样是最优的。当然注意一下当搜到的房间的$fa$为$0$时不能记录。

  Code:

//It is made by HolseLee on 11th Aug 2019
//Luogu.org P4698
#include<bits/stdc++.h>
using namespace std; const int N=5e5+;
int n,m,o,fa[N],mon[N];
long long ans;
struct Room {
int cos,p;
bool operator < ( const Room A ) const {
return p==A.p ? cos>A.cos : p>A.p;
}
}a[N];
struct Custom {
int val,num;
bool operator < ( const Custom A ) const {
return val==A.val ? num<A.num : val>A.val;
}
}b[N]; inline int read()
{
int x=; char ch=getchar();
while( ch<'' || ch>'' ) ch=getchar();
while( ch>='' && ch<='' ) {
x=x*+ch-''; ch=getchar();
}
return x;
} int search(int v)
{
int l=, r=n, mid, ret=;
while( l<=r ) {
mid=l+r>>;
if( a[mid].p>=v ) ret=mid, l=mid+;
else r=mid-;
}
return ret;
} int find(int x)
{
return fa[x]==x ? x : fa[x]=find(fa[x]);
} int main()
{
n=read(), m=read(), o=read();
for(int i=; i<=n; ++i) {
a[i].cos=read(), a[i].p=read(); fa[i]=i;
}
for(int i=; i<=m; ++i) {
b[i].val=read(), b[i].num=read();
}
sort(a+,a+n+); sort(b+,b+m+);
//for(int i=1; i<=n; ++i) cout<<a[i].cos<<' '<<a[i].p<<'\n';
//for(int i=1; i<=m; ++i) cout<<b[i].val<<' '<<b[i].num<<'\n';
int x,tot=,sum=;
for(int i=; i<=m; ++i) {
x=search(b[i].num);
x=find(x);
if( x ) {
if( b[i].val-a[x].cos<= ) continue;
mon[++tot]=(b[i].val-a[x].cos);
fa[x]=x-;
}
}
sort(mon+,mon+tot+);
for(int i=tot; i>; --i) {
ans+=mon[i]; sum++;
if( sum==o ) break;
}
printf("%lld\n",ans);
return ;
}

洛谷P4698 [CEOI2011]Hotel [贪心,二分,并查集]的更多相关文章

  1. 洛谷 P1525 关押罪犯 (贪心,扩展域并查集)

    题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先 ...

  2. 洛谷P3247 [HNOI2016]最小公倍数 [分块,并查集]

    洛谷 思路 显然,为了达到这个最小公倍数,只能走\(a,b\)不是很大的边. 即,当前询问的是\(A,B\),那么我们只能走\(a\leq A,b\leq B\)的边. 然而,为了达到这最小公倍数,又 ...

  3. Bzoj5188/洛谷P4185 [Usaco2018 Jan]MooTube(并查集)

    题面 Bzoj 洛谷 题解 最暴力的方法是直接判两个点之间的路径最小值是否\(\geq k\),用\(Dijkstra\)可以做到该算法最快效率,但是空间复杂度始终是\(O(n^2)\)的,会\(ML ...

  4. 洛谷P4004 Hello world!(分块+并查集)

    传送门 虽然洛谷数据水,然而咱最终还是没有卡过uoj上的毒瘤数据-- 神tm全uoj就3个人过了这题-- 首先,每个数最多被开根\(6\)次,开到\(1\)之后就别管它了,把它用并查集连到它父亲上 它 ...

  5. 【南开OJ2264】节操大师(贪心+二分+并查集/平衡树)

    好久没更新了,今天就随便写一个吧 题目内容 MK和他的小伙伴们(共n人,且保证n为2的正整数幂)想要比试一下谁更有节操,于是他们组织了一场节操淘汰赛.他们的比赛规则简单而暴力:两人的节操正面相撞,碎的 ...

  6. 洛谷P1196 银河英雄传说[带权并查集]

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  7. [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  8. 【洛谷P3224】永无乡 并查集+Splay启发式合并

    题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...

  9. 洛谷P4768 [NOI2018]归程 [可持久化并查集,Dijkstra]

    题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时 ...

随机推荐

  1. git 使用中报错:LF will be replaced by CRLF in app.json

    git config --global core.autocrlf false //禁用自动转换

  2. shell脚本查询某一目录的某一部分文件并且拷贝到其他目录(有则跳过没有则拷贝)

    #!/bin/bash dir=`ls /root//*` for i in $dir do #basename 返回一个字符串参数的基本文件名称.(只剩下文件名除去路径名) a=`basename ...

  3. .net core默认不支持gb2312

    采集数据时,乱码,之前遇到过这个情况,于是老办法: 果断使用Encoding.GetEncoding(“GB2312”),抛异常.搜了下,是因为.net core默认不支持gb2312 所以,两个办法 ...

  4. GC原理图

    GC原理图,Jdk1.6及以下版本 永久代 永久代是Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西.在Java 8中,永久代被彻底移除,取而代之的是另一块与堆不相连的本地 ...

  5. beego学习笔记一:创建第一个beego Web项目 转

    前提工作 环境搭建,可以参考如下两篇教程:搭建Go语言环境1搭建Go语言环境2 安装beego beego 的安装是典型的 Go 安装包的形式: go get github.com/astaxie/b ...

  6. 【python】导入自定义模块

    一.直接import 1.当执行文件与要导入的py文件在同一目录下时 假设要在wangyi.py中导入weibo.py文件 import weibo 2.当执行文件与要导入的py文件所在文件夹在同一目 ...

  7. RobHess的SIFT代码解析步骤四

    平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码 2.书:王永明 ...

  8. db2数据库的备份与还原

    前言: 数据备份的重要性: 提高系统的高可用性和灾难可恢复性:(在数据库系统崩溃的时候,没有数据库备份怎么办!) 使用数据库备份还原数据库是数据库系统崩溃时提供数据恢复最小代价的最优方案:(总不能让客 ...

  9. Django—ModelForm

    简介 Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 验证 数据库操作 Form回顾 models.py class UserType(mo ...

  10. idea的使用问题解决

    IDEA集成SVN插件,用的是TortoiseSVN,SVN上明明有别人提交的内容,但是我这里点击Incoming确显示不出来 解决方案:file->Invalidate Cache/Resta ...