BZOJ 2034: [2009国家集训队]最大收益 [贪心优化 Hungary]
2034: [2009国家集训队]最大收益
题意:\(n \le 5000\)个区间\(l,r\le 10^8\),每个区间可以选一个点得到val[i]的价值,每个点最多选1次,求最大价值
线段树优化建边的做法见上一篇
论文
先把l,r离散化了,因为一个区间只选一个点,所以我们对于每个区间拿出一个点来就行了,方法是按l排序然后每个区间选左边界后的第一个未选点
当然这个点可能超出区间,所以我们要让区间与点匹配得到最大价值
- 法1:裸上二分图最大权匹配,即使线段树优化建边还是承受不了
- 法2:这个二分图很特殊,X的出边权值相同,我们可以贪心从大到小选择,用Hungary找增广路,复杂度\(O(n^3)\)
- 法3:这个二分图超级特殊啊,X中每个点出边的集合是连续的一段,我们很方便比较两个点的可匹配点集合的大小,如果可匹配点集合更大的都找不到未盖点小的根本不用找啊!我们修改一下Hungary的过程,记下当前选到Y的哪个点now,如果now未匹配则匹配now,否则比较now的匹配点与当前点可匹配集合的大小,让更大的去找匹配。这样就省去了每个点遍历所有出边的过程,复杂度\(O(n^2)\)
总结
让深入分析问题的性质! 贪心乱搞随便过
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define fir first
#define sec second
typedef long long ll;
const int N=1e4+5, INF=1e9;
inline ll read(){
char c=getchar();ll x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n;
struct meow{
int l, r, val;
bool operator <(const meow &a) const {return val>a.val;}
}a[N];
bool cmp(const meow &a, const meow &b) {return a.l < b.l;}
int mp[N], m;
void disc() {
sort(a+1, a+1+n, cmp);
mp[++m]=a[1].l; int now=mp[m];
for(int i=2; i<=n; i++)
mp[++m] = max(now+1, a[i].l), now=mp[m];
for(int i=1; i<=n; i++) {
a[i].l = lower_bound(mp+1, mp+1+m, a[i].l) - mp;
int t = lower_bound(mp+1, mp+1+m, a[i].r) - mp;
a[i].r = mp[t] == a[i].r ? t : t-1;
}
}
int le[N];
bool find(int u, int now) {
if(now>a[u].r) return false;
if(!le[now]) {le[now]=u; return true;}
if(a[u].r > a[le[now]].r) return find(u, now+1);
else {
if(find(le[now], now+1)) {le[now]=u; return true;}
else return false;
}
}
void solve() {
sort(a+1, a+1+n);
ll ans=0;
for(int i=1; i<=n; i++) if(find(i, a[i].l)) ans+=a[i].val;
printf("%lld", ans);
}
int main() {
freopen("in","r",stdin);
n=read();
for(int i=1; i<=n; i++) a[i].l=read(), a[i].r=read()-1, a[i].val=read();
disc();
solve();
}
BZOJ 2034: [2009国家集训队]最大收益 [贪心优化 Hungary]的更多相关文章
- 【BZOJ2034】[2009国家集训队]最大收益 贪心优化最优匹配
[BZOJ2034][2009国家集训队]最大收益 Description 给出N件单位时间任务,对于第i件任务,如果要完成该任务,需要占用[Si, Ti]间的某个时刻,且完成后会有Vi的收益.求最大 ...
- BZOJ.2034.[2009国家集训队]最大收益(二分图匹配 贪心)
题目链接 双倍经验:BZOJ.4276.[ONTAK2015]Bajtman i Okrągły Robin(然而是个权限题.区间略有不同) \(Description\) 有\(n\)个任务,完成一 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子
二次联通门 : BZOJ 2038: [2009国家集训队]小Z的袜子 /* BZOJ 2038: [2009国家集训队]小Z的袜子 莫队经典题 但是我并不认为此题适合入门.. Answer = ∑ ...
- BZOJ 2039: [2009国家集训队]employ人员雇佣
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1369 Solved: 667[Submit ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7676 Solved: 3509[Subm ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
随机推荐
- Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
TLD算法回顾 TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek Kalal在其攻读博士学位期间提出的一种新的单目标长时间(long ter ...
- Spring框架学习笔记(9)——Spring对JDBC的支持
一.使用JdbcTemplate和JdbcDaoSupport 1.配置并连接数据库 ①创建项目并添加jar包,要比之前Spring项目多添加两个jar包c3p0-0.9.1.2.jar和mysql- ...
- Django App(二) Connect Mysql & defualt App admin
这一篇接着上一篇polls App自动创建admin app. 1.安装数据库 这里的内容从官网看越看越像 EntityFramework的内容.Python支持SQLite,MySql,Or ...
- 使用notepad++作为keil的外部编辑器
之前一直不喜欢keil的编辑界面,但是又不想太浮夸.看到很多群里有人用vscode写stm32的序,但是直接用vscode编写的花,各种设置很麻烦.而且还不能调试.于是想到有没有一个轻便简约的外部编辑 ...
- 把织梦安装到子目录,不读取CSS 没有样式?
我在A5上找的一个模板,照着说明安装到根目录就正常,我想安装到子目录下面,结果很乱 应该是不读取CSS. {dede:global.cfg_templets_skin/}/style/about.cs ...
- (实用篇)使用PHP生成PDF文档
http://mp.weixin.qq.com/s?__biz=MzIxMDA0OTcxNA==&mid=2654254929&idx=1&sn=8715d008d19af70 ...
- dede添加会员功能听语音
http://jingyan.baidu.com/article/363872ec36d33f6e4ba16fb7.html 其实 dede里面的 会员功能就是圈子模版啦 圈子 安装了 基本上有 1, ...
- 【开发技术】视频URL采集
http://www.joyplus.tv/joypluscms 志精
- 为什么选择.NETCore?
为什么.NETCore? 学习新的开发框架是一项巨大的投资.您需要学习如何在新框架中编写,构建,测试,部署和维护应用程序.作为开发人员,有许多框架可供选择,很难知道什么是最适合的工作.即使您正在使用. ...
- Linux - ubuntu读取/root/.profile时发现错误:mesg:ttyname fa
启动ubuntu,以root用户登陆,打开命令行终端 输入命令:#vim /root/.profile 找到.profile文件中的mesg n 将其替换成tty -s && mesg ...