看上去像是一个最大权闭合子图裸题但是数据太大

我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排

这样我们就可以按SORT序遍历守卫 然后贪心地把每个守卫的流量流给离他最近的Y最小的宝物 易证这样是最优的

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline void read(int &x) {
char c;
int f = ;
while (!((c = getchar()) >= '' && c <= ''))
if (c == '-')
f = -;
x = c - '';
while ((c = getchar()) >= '' && c <= '')
(x *= ) += c - '';
if (f == -)
x = -x;
}
const int maxn = ;
const double eps = 1e-;
int n, m, N, w, h;
struct node {
double x, y;
int i, c;
} X, Y, a[maxn];
inline bool operator <(const node x, const node y) {
return x.y - y.y > eps;
}
inline bool cmp(const node x, const node y) {//按横坐标从小到大,纵坐标从大到小排序
if (fabs(x.x - y.x) < eps)
return x.y - y.y < -eps;
return x.x - y.x < -eps;
}
multiset<node>S;
multiset<node>::iterator it, it2;
node generate(int x, int y) { //视野转换为第二象限
double A = ((double)x / w - (double)y / h) / 2.0;
double B = A - (double)x / w;
return (node) {
-A, -B, ,
};
}
ll re;
int main() {
read(n);
read(m);
N = n + m;
read(w);
read(h);
//X=(node){w,-h};
//Y=(node){-w,-h};
for (int i = ; i <= n; i++) {
int x, y, c;
read(x);
read(y);
read(c);
a[i] = generate(x, y);
a[i].i = i;
a[i].c = c;
re += c;
}
for (int i = ; i <= m; i++) {
int x, y, c;
read(x);
read(y);
read(c);
a[n + i] = generate(x, y);
a[n + i].i = n + i;
a[n + i].c = c;
}
sort(a + , a + N + , cmp);
for (int i = ; i <= N; i++) {
if (a[i].i <= n)
S.insert(a[i]);
else {
it = S.lower_bound(a[i]);
while (it != S.end() && a[i].c) {
it2 = it;
it2++; //指向下一个
if (a[i].c < (*it).c) {
node tmp = (*it);
tmp.c -= a[i].c;
re -= a[i].c;
S.erase(it);
S.insert(tmp);
break;
}
a[i].c -= (*it).c;
re -= (*it).c;
S.erase(it);
it = it2;
}
}
}
printf("%lld\n", re);
return ;
}

BZOJ 3716 [PA2014]Muzeum 贪心SET最大闭合子图的更多相关文章

  1. bzoj 3716: [PA2014]Muzeum

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

  2. bzoj 3709: [PA2014]Bohater 贪心

    题目: 在一款电脑游戏中,你需要打败\(n\)只怪物(从\(1\)到\(n\)编号).为了打败第\(i\)只怪物,你需要消耗\(d_i\)点生命值,但怪物死后会掉落血药,使你恢复\(a_i\)点生命值 ...

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

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

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

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

  5. BZOJ.1312.[Neerc2006]Hard Life(分数规划 最大权闭合子图)

    BZOJ 最大密度子图. 二分答案\(x\),转为求是否存在方案满足:\(边数-x*点数\geq 0\). 选一条边就必须选两个点,所以可以转成最大权闭合子图.边有\(1\)的正权,点有\(x\)的负 ...

  6. [PA2014]Muzeum

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

  7. BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

    链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...

  8. bzoj3716/4251 [PA2014]Muzeum

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

  9. BZOJ 1565 NOI2009 植物大战僵尸 topo+最小割(最大权闭合子图)

    题目链接:https://www.luogu.org/problemnew/show/P2805(bzoj那个实在是有点小小的辣眼睛...我就把洛谷的丢出来吧...) 题意概述:给出一张有向图,这张有 ...

随机推荐

  1. WebGL学习之纹理盒

    原文地址:WebGL学习之纹理盒 我们之前已经学习过二维纹理 gl.TEXTURE_2D,而且还使用它实现了各种效果.但还有一种立方体纹理 gl.TEXTURE_CUBE_MAP,它包含了6个纹理代表 ...

  2. mysql中mysql数据库丢失报错Can't open the mysql.plugin table

    180720 10:00:54 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 18 ...

  3. java23种设计模式之八: 工厂方法模式

    定义: 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的“创建与使用相分离”的特点. 我们把被创建的对象称为“产品”,把创建产品的对象称为“工 ...

  4. K8S从入门到放弃系列-(10)kubernetes集群之kube-proxy部署

    摘要: kube-proxy的作用主要是负责service的实现,具体来说,就是实现了内部从pod到service和外部的从node port向service的访问 新版本目前 kube-proxy ...

  5. vmware安装win7*64位时,安装不成功的关键点是光驱接口类型选择为IDE模式

    mware 安装win7*64时,找不到光盘,后来在xin7*64的虚拟机下的编辑虚拟机设置 找到光驱,点击高级,并选择IDE即可,这样就可以进入虚拟机找到光驱和硬盘到了.进入winpe后可以看到各种 ...

  6. Python--yaml文件写入

    原文地址:https://www.cnblogs.com/yoyoketang/p/9255109.html yaml作为配置文件是非常友好的一种格式,前面一篇讲了yaml的一些基础语法和读取方法,本 ...

  7. 资源|《美团机器学习实践》PDF+思维导图

    今天再给大家推荐一本由美团算法团队出版的<美团机器学习实践>,下载链接见文末. 美团算法团队由数百名优秀算法工程师组成,负责构建美团这个生活服务互联网大平台的"大脑", ...

  8. c语言 运算器

    #include<stdio.h> #include<stdbool.h> void menu(){ printf("************************ ...

  9. 【BFS】Help the Princess!

    题目描述 The people of a certain kingdom make a revolution against the bad government of the princess. T ...

  10. python实现数字0开始的索引,对应Execl的字母方法

    字母转数字方法: import re col = row = [] # 输入正确格式的定位,A2,AA2有效,AAB2无效 while len(col) == 0 or len(row) == 0 o ...