LOJ2514 CEOI2011 Hotel 贪心
考虑一个贪心:对于所有人群按照收益从大到小排序,对于每一个人群找到当前能够选择的代价最小的房间成为一组可行订单(如果没有就不可行),最后将这些订单按照收益排序,选其中正的前\(o\)大即可。找代价最小的房间可以使用并查集,因为有偏序关系所以可以直接二分。
考虑其正确性:对于两个人群\(i,j(v_i > v_j)\),在我们的算法中会先给\(i\)分配房间,再给\(j\)分配房间。如果\(i\)分配的房间会影响\(j\)分配房间的选择,那么反过来先选\(j\)再选\(i\)也会导致\(i\)受到同样的影响。所以顺序不会影响最终匹配的个数。
而如果最终方案中\(i\)和\(j\)只能选择一个,那么一定会选择\(i\)和\(ij\)都能选的房间中代价较低的更优,这在算法中已经体现了;而如果同时选择了\(i,j\),那么\(i\)和\(j\)的房间互换不会影响答案,所以如何分配都可以。
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
    int a = 0;
    char c = getchar();
    bool f = 0;
    while(!isdigit(c)){
        if(c == '-') f = 1;
        c = getchar();
    }
    while(isdigit(c)){
        a = a * 10 + c - 48;
        c = getchar();
    }
    return f ? -a : a;
}
const int MAXN = 5e5 + 3;
#define PII pair < int , int >
vector < int > price;
vector < PII > room , peo;
int N , M , K , fa[MAXN];
int find(int x){
    return fa[x] == x ? x : (fa[x] = find(fa[x]));
}
bool cmp(PII a , PII b){return a.first > b.first;}
bool cmp1(int a , int b){return a > b;}
signed main(){
    #ifndef ONLINE_JUDGE
    freopen("B.in","r",stdin);
    freopen("B.out","w",stdout);
    #endif
    N = read(); M = read(); K = read();
    for(int i = 0 ; i < N ; ++i){
        int a = read() , b = read();
        room.push_back(PII(b , a));
        fa[i] = i;
    }
    fa[N] = N;
    sort(room.begin() , room.end());
    for(int i = 1 ; i <= M ; ++i){
        int a = read() , b = read();
        peo.push_back(PII(a , b));
    }
    sort(peo.begin() , peo.end() , cmp);
    for(auto t : peo){
        int pos = find(lower_bound(room.begin() , room.end() , PII(t.second , 0)) - room.begin());
        if(pos != N){
            fa[pos] = pos + 1;
            price.push_back(t.first - room[pos].second);
        }
    }
    sort(price.begin() , price.end() , cmp1);
    long long sum = 0;
    for(int i = 0 ; i < K && i < price.size() ; ++i)
        if(price[i] > 0)
            sum += price[i];
    cout << sum;
    return 0;
}
												
											LOJ2514 CEOI2011 Hotel 贪心的更多相关文章
- 洛谷P4698 [CEOI2011]Hotel [贪心,二分,并查集]
		
题目传送门 Hotel 题目描述 你经营着一家旅馆,这家旅馆有 n 个房间,每个房间有维护费用和容量.其中第 i 个房间的维护费用为 ci,容量为 pi 人. 现在有 m 个订单,每个订单有两个参 ...
 - 退役前的最后的做题记录upd:2019.04.04
		
考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...
 - bzoj AC倒序
		
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
 - German Collegiate Programming Contest 2013-B:Booking(贪心)
		
Booking Pierre is in great trouble today! He is responsible for managing the bookings for the AC ...
 - [bzoj1135][Ceoi2011]Match_线段树
		
[Ceoi2011]Match 题目大意:初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负, ...
 - BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
		
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
 - HDOJ 1051. Wooden Sticks 贪心 结构体排序
		
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
 - HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
		
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
 - BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
		
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
 
随机推荐
- Java的几个基本类型之间的相互转换
			
前言: 转载申明: 作者:王蒙 链接:http://matt33.com/2015/10/27/TheTransformOfJava/ 之前在写java程序的时候,经常会遇到很多的需要需要转换基础数据 ...
 - 表达式目录树(Expression)
			
一:什么是表达式树 Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算.通常表达式目录树是配合Lambda一起来使用的,la ...
 - 【转载】C#中自定义Sort的排序规则IComparable接口
			
C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
 - Dapper批量操作实体
			
首先要安装 Dapper.Contrib,直接从nuget安装即可. dapper官方文档:http://dapper-tutorial.net/dapper T Get<T>(id); ...
 - C# 程序异常关闭时的捕获
			
本文主要以一个简单的小例子,描述C# Winform程序异常关闭时,如何进行捕获,并记录日志. 概述 有时在界面的事件中,明明有try... catch 进行捕获异常,但是还是会有异常关闭的情况,所以 ...
 - 2019-02-10 扩展Python控制台实现中文反馈信息
			
"中文编程"知乎专栏原文地址 参考了周蟒的实现, 运行效果如下: $ python3 解释器.py Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 ...
 - Ubuntu 16.04安装Zabbix 3.2 版本
			
系统环境:ubuntu16.04 注意:为了便于实验测试,需要关闭防火墙: parallels@zabbix-server:~$ sudo systemctl stop ufw parallels ...
 - 命令行以及Python交互模式下python程序的编写
			
一.命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>: 二.Python交互模式 在命令行模式下敲命令python,就看到类似如下的一堆文本输出 ...
 - 超级强大的socket工具ss,替代netstat
			
1.结论:ss 命令比netstat 更强大,提供功能更多,并且性能更高. 2.显示当前系统的socket占用总体宏观情况. ss -s 当已创建的socket数过多时,已经说明系统配置存在问题. 3 ...
 - python告诉你ti8 dota2英雄bp
			
文章链接:https://mp.weixin.qq.com/s/phJzZEQojndY-iNe77RF_w 恭喜OG成为ti8冠军,很可惜这次偶数年ti8中国队LGD与冠军失之交臂. 上学那会儿还是 ...