【BZOJ3716】[PA2014]Muzeum(贪心,网络流)
【BZOJ3716】[PA2014]Muzeum(贪心,网络流)
题面
题解
很明显可以写最大权闭合子图,然后会\(TLE\)成傻逼。
为了方便,就把一个警卫能够看到的范围处理一下(把坐标系处理一下),强制让他看到一个\(90°\)的夹角,再旋转一下就可以变成强制看到右下角的范围。
我们知道最大权闭合子图求出来的最小割=最大流。
那么我们来模拟这个过程,首先把所有警卫加入进来,其流量为贿赂他的代价。按照\(x\)轴排序之后,把所有它能够看到的宝物拿进来,然后考虑向谁流,会流向他能够看见的所有宝物中\(y\)最小的那个,大概证明就是你在这里多流了\(1\)不会比在后面多流\(1\)更差,然后\(y\)越大限制就越大,所以优先填限制最大的那个。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
#define MAX 200200
#define ll long long
#define pi pair<ll,ll>
#define mp make_pair
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct Node{ll x,y,v;}a[MAX],b[MAX];
bool operator<(Node a,Node b){return a.x<b.x;}
ll ans;int n,m,w,h;
set<pi> S;
int main()
{
n=read();m=read();w=read();h=read();
for(int i=1;i<=n;++i)
{
ll x=1ll*read()*h,y=1ll*read()*w,v=read();
a[i]=(Node){x+y,x-y,v};ans+=v;
}
for(int i=1;i<=m;++i)
{
ll x=1ll*read()*h,y=1ll*read()*w,v=read();
b[i]=(Node){x+y,x-y,v};
}
sort(&a[1],&a[n+1]);sort(&b[1],&b[m+1]);
for(int i=1,j=1;i<=m;++i)
{
while(j<=n&&a[j].x<=b[i].x)S.insert(mp(a[j].y,a[j].v)),++j;
set<pi>::iterator it=S.lower_bound(mp(b[i].y,0));
ll flow=b[i].v;
while(flow&&it!=S.end())
{
pi q=*it;S.erase(it);
ll d=min(q.second,flow);
flow-=d;q.second-=d;ans-=d;
if(q.second)S.insert(q);
else it=S.lower_bound(mp(b[i].y,0));
}
}
printf("%lld\n",ans);
return 0;
}
【BZOJ3716】[PA2014]Muzeum(贪心,网络流)的更多相关文章
- BZOJ 3716 [PA2014]Muzeum 贪心SET最大闭合子图
看上去像是一个最大权闭合子图裸题但是数据太大 我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排 这样我们就可以按SORT序遍 ...
- [PA2014]Muzeum
[PA2014]Muzeum 题目大意: 有\(n\)件展品和\(m\)个警卫,每件展品有一个坐标\((x_i,y_i)\)和价值\(v_i\),每个警卫的坐标为\((x_i,y_i)\).每个警卫面 ...
- 【BZOJ3716】[PA2014]Muzeum(贪心+网络流)
BZOJ 题意: 在二维网格图中有\(n\)个物品,每个物品有价值:但有\(m\)个警卫看管这些物品,每个警卫面朝\(y\)轴负方向,能看到一定角度(假定能够看到无穷远). 现在每个敬畏有一个贿赂价钱 ...
- bzoj3716/4251 [PA2014]Muzeum
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3716 http://www.lydsy.com/JudgeOnline/problem.ph ...
- bzoj 3716: [PA2014]Muzeum
Description 吉丽的漫展有n件手办和m名警卫.建立平面直角坐标系,每个手办和警卫都可以看做一个点.警卫们的目光都朝着y轴负方向,且都有相同大小的视角.警卫可以看见自己视角内(包括边界上的点) ...
- [bzoj3709][PA2014]Bohater_贪心
bzoj-3709 PA-2014 Bohater 题目大意:在一款电脑游戏中,你需要打败n只怪物(从1到n编号).为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i ...
- 【BZOJ4619/3709】[Wf2016]Swap Space/[PA2014]Bohater 贪心
[BZOJ4619][Wf2016]Swap Space Description 你有许多电脑,它们的硬盘用不同的文件系统储存数据.你想要通过格式化来统一文件系统.格式化硬盘可能使它的容量发生变化.为 ...
- bzoj3717 [PA2014]Pakowanie 贪心+状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3717 题解 这道题大概也就只能算常规的状压 DP 吧,但是这个状态和转移的设计还是不是很好想. ...
- bzoj3709: [PA2014]Bohater 贪心
~~~题面~~~ 题解: 首先有一个比较明显的策略,肯定先要把能带给自己受益的先选完,然后再以最佳状态去打那些会给自己带来损失的怪. 对于前一部分(可以带来受益的怪),显然我们需要先从代价小的打起,因 ...
随机推荐
- PS打造油画般的风景人像
- Redis缓存用起来
Redis缓存用起来 1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用户,以供用户选择.我们每创建一个任务时都要去数据库取一次用户列表,然后绑定到用户 ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
- GFS浅析
1 . 简介 GFS, Big Table, Map Reduce称为Google的三驾马车,是许多基础服务的基石 GFS于2003年提出,是一个分布式的文件系统,与此前的很多分布式系统的前提假设存在 ...
- linux下jenkins的时区设置问题
https://blog.csdn.net/king_wang10086/article/details/76178711 [root@jenkins ~]# yum install -y ntpda ...
- jenkins 插件介绍
1.jenkins 利用maven编译,打包,所需插件:Maven Integration: Maven集成插件这个插件提供了Jenkins和Maven的深度集成,无论是好还是坏:项目之间的自动触发取 ...
- 完美解决safari、微信浏览器下拉回弹效果
CSS代码: .box{ overflow: auto; -webkit-overflow-scrolling: touch; } HTML代码: <body class="box&q ...
- js-其他跨域技术(JSONP`Comet)
###1. JSONP JSONP由两部分组成:回调函数和数据 JSONP是通过动态<script>元素来使用的,使用时可以为src属性指定一个跨域URL eg: function ha ...
- JavaScript中变量、执行环境、作用域与C#中的异同
首先需要明确一个执行环境的概念,执行环境这个概念是用来理解作用域的,在js中,执行环境分为全局执行环境和局部(function)执行环境,而在C#这类的C类语言中,还有一个块级别的执行环境,如if语句 ...
- Oracle 不小心删除undo数据文件以及磁盘空间不足导致不能登录的解决办法
在一次测试中,由于导入的数据量过大导致事务一直提交失败因为磁盘空间不够用了,一检查发现是undo表空间不够用,于是重新创建了一个表空间,准备把之前的undo表空间删除,删除时却发现一直删不掉,因为它一 ...