传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3716

http://www.lydsy.com/JudgeOnline/problem.php?id=4251

【题解】

非常妙的网络流转化

首先可以把警卫和宝藏看成最大权闭合子图,用最小割的那种建模方法,即一开始加进来所有宝藏的价值

然后S连宝藏,警卫连T,有覆盖关系的连inf

那么就是一个最小割,复杂度是$O(maxflow(n+m, nm)$,显然承受不了。

由于最小割和最大流等价,所以转化最大流考虑。

问题变为

那么按x从大到小排序,每次2种操作:加入一个物品;有一个警卫可以喷水给所有y小于它物品。

显然按照y从大到小喷最优,因为小的限制条件小。

用个set维护即可,注意set的时候lower_bound只能s.lower_bound(...),不能lower_bound(s.begin(), s.end(), ..)!!!

# include <set>
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int N = 2e5 + ;
const int mod = 1e9+;
const ll inf = 5e18; inline int getint() {
int x = , f = ; char ch = getchar();
while(!isdigit(ch)) {
if(ch == '-') f = ;
ch = getchar();
}
while(isdigit(ch)) {
x = (x<<) + (x<<) + ch - '';
ch = getchar();
}
return f ? x : -x;
} int n, m, W, H;
struct pa {
ll x, y; int v;
pa () {}
pa (ll x, ll y, int v) : x(x), y(y), v(v) {}
inline friend bool operator < (pa a, pa b) {
return a.y < b.y || (a.y == b.y && a.x < b.x);
}
}a[N], b[N]; struct option {
ll x, y; int v, op;
option() {}
option(int op, ll x, ll y, int v) : op(op), x(x), y(y), v(v) {}
inline friend bool operator < (option a, option b) {
return a.x < b.x || (a.x == b.x && a.op > b.op);
}
}p[N + N]; set<pa> s;
set<pa>::iterator it; int main() {
ll ans = ;
cin >> n >> m >> W >> H;
for (int i=; i<=n; ++i) {
a[i].x = 1ll * H * getint(), a[i].y = 1ll * W * getint(), a[i].v = getint();
p[i] = option(, a[i].x - a[i].y, a[i].x + a[i].y, a[i].v); ans += a[i].v;
}
for (int i=; i<=m; ++i) {
b[i].x = 1ll * H * getint(), b[i].y = 1ll * W * getint(), b[i].v = getint();
p[n + i] = option(, b[i].x - b[i].y, b[i].x + b[i].y, b[i].v);
} // maxflow
int pn = n + m;
sort(p+, p+pn+); s.clear(); for (int i=pn; i; --i) {
if(p[i].op == ) s.insert(pa(p[i].x, p[i].y, p[i].v));
else {
int cv = p[i].v;
pa r = pa(inf, p[i].y, cv), t;
while(cv && s.size()) {
it = s.upper_bound(r);
if(it == s.begin()) break;
--it; t = *it; s.erase(it);
int tmp = min(t.v, cv);
cv -= tmp, t.v -= tmp; ans -= tmp;
if(t.v > ) s.insert(t);
}
}
} cout << ans; return ;
}

bzoj3716/4251 [PA2014]Muzeum的更多相关文章

  1. 【BZOJ3716】[PA2014]Muzeum(贪心,网络流)

    [BZOJ3716][PA2014]Muzeum(贪心,网络流) 题面 BZOJ 题解 很明显可以写最大权闭合子图,然后会\(TLE\)成傻逼. 为了方便,就把一个警卫能够看到的范围处理一下(把坐标系 ...

  2. 【BZOJ3716】[PA2014]Muzeum(贪心+网络流)

    BZOJ 题意: 在二维网格图中有\(n\)个物品,每个物品有价值:但有\(m\)个警卫看管这些物品,每个警卫面朝\(y\)轴负方向,能看到一定角度(假定能够看到无穷远). 现在每个敬畏有一个贿赂价钱 ...

  3. [PA2014]Muzeum

    [PA2014]Muzeum 题目大意: 有\(n\)件展品和\(m\)个警卫,每件展品有一个坐标\((x_i,y_i)\)和价值\(v_i\),每个警卫的坐标为\((x_i,y_i)\).每个警卫面 ...

  4. bzoj 3716: [PA2014]Muzeum

    Description 吉丽的漫展有n件手办和m名警卫.建立平面直角坐标系,每个手办和警卫都可以看做一个点.警卫们的目光都朝着y轴负方向,且都有相同大小的视角.警卫可以看见自己视角内(包括边界上的点) ...

  5. BZOJ 3716 [PA2014]Muzeum 贪心SET最大闭合子图

    看上去像是一个最大权闭合子图裸题但是数据太大 我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排 这样我们就可以按SORT序遍 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  8. 退役前的最后的做题记录upd:2019.04.04

    考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...

  9. BZOJ 3721: PA2014 Final Bazarek

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 645  Solved: 261[Submit][ ...

随机推荐

  1. 《剑指offer》---寻找反转数组最小值

    本文算法使用python3实现 1.题目描述:   把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...

  2. Delphi中正常窗口的实现

    摘要: 在Delphi的VCL库中,为了使用以及实现的方便,应用对象Application创建了一个用来处理消息响应的隐藏窗口.而正是这个窗口,使得用VCL开发出来的程序存在着与其他窗口不能正常排列平 ...

  3. SVG总结小知识

    SVG:可缩放矢量图形.全称是:Scalable Vector Graphics SVG使用 XML 格式定义图像.   SVG是使用 XML 来描述(二维图形和绘图)程序的语言.   SVG是W3C ...

  4. AngularJS注入依赖路由总结

    属性 描述 $dirty  表单有填写记录 $valid 字段内容是合法的 $invalid 字段内容是非法的 $pristine 表单没有填写记录 什么事依赖注入? 依赖注入是一种软件设计模式,在这 ...

  5. BZOJ3196 & 洛谷3380:二逼平衡树——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3196 https://www.luogu.org/problemnew/show/P3380 (题 ...

  6. BZOJ2458:[BJOI2011]最小三角形——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2458 Description Xaviera现在遇到了一个有趣的问题. 平面上有N个点,Xavier ...

  7. openjudge666:放苹果—题解

    (测试这里的markdown,同时也有纪念意义吧--第一次写的题解) 当时刚学递推的时候做的一道题 oj上的666题 666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M ...

  8. 洛谷 P2898 [USACO08JAN]haybale猜测Haybale Guessing 解题报告

    [USACO08JAN]haybale猜测Haybale Guessing 题目描述 给一段长度为\(n\),每个位置上的数都不同的序列\(a[1\dots n]\)和\(q\)和问答,每个问答是\( ...

  9. Hydra—密码爆破神器

    公司邮箱系统密码复杂度规则:字母大小写.数字.特殊字符,四选三,长度8位以上.这种复杂度的密码看着是比较安全的,但因历史原因,邮箱系统开放了外网登陆权限,加之公司人数众多,必然会有少量员工把自己的密码 ...

  10. UVA.725 Division (暴力)

    UVA.725 Division (暴力) 题意分析 找出abcdefghij分别是0-9(不得有重复),使得式子abcde/fghij = n. 如果分别枚举每个数字,就会有10^10,肯定爆炸,由 ...