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

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

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

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. inline void read(int &x) {
  5. char c;
  6. int f = ;
  7. while (!((c = getchar()) >= '' && c <= ''))
  8. if (c == '-')
  9. f = -;
  10. x = c - '';
  11. while ((c = getchar()) >= '' && c <= '')
  12. (x *= ) += c - '';
  13. if (f == -)
  14. x = -x;
  15. }
  16. const int maxn = ;
  17. const double eps = 1e-;
  18. int n, m, N, w, h;
  19. struct node {
  20. double x, y;
  21. int i, c;
  22. } X, Y, a[maxn];
  23. inline bool operator <(const node x, const node y) {
  24. return x.y - y.y > eps;
  25. }
  26. inline bool cmp(const node x, const node y) {//按横坐标从小到大,纵坐标从大到小排序
  27. if (fabs(x.x - y.x) < eps)
  28. return x.y - y.y < -eps;
  29. return x.x - y.x < -eps;
  30. }
  31. multiset<node>S;
  32. multiset<node>::iterator it, it2;
  33. node generate(int x, int y) { //视野转换为第二象限
  34. double A = ((double)x / w - (double)y / h) / 2.0;
  35. double B = A - (double)x / w;
  36. return (node) {
  37. -A, -B, ,
  38. };
  39. }
  40. ll re;
  41. int main() {
  42. read(n);
  43. read(m);
  44. N = n + m;
  45. read(w);
  46. read(h);
  47. //X=(node){w,-h};
  48. //Y=(node){-w,-h};
  49. for (int i = ; i <= n; i++) {
  50. int x, y, c;
  51. read(x);
  52. read(y);
  53. read(c);
  54. a[i] = generate(x, y);
  55. a[i].i = i;
  56. a[i].c = c;
  57. re += c;
  58. }
  59. for (int i = ; i <= m; i++) {
  60. int x, y, c;
  61. read(x);
  62. read(y);
  63. read(c);
  64. a[n + i] = generate(x, y);
  65. a[n + i].i = n + i;
  66. a[n + i].c = c;
  67. }
  68. sort(a + , a + N + , cmp);
  69. for (int i = ; i <= N; i++) {
  70. if (a[i].i <= n)
  71. S.insert(a[i]);
  72. else {
  73. it = S.lower_bound(a[i]);
  74. while (it != S.end() && a[i].c) {
  75. it2 = it;
  76. it2++; //指向下一个
  77. if (a[i].c < (*it).c) {
  78. node tmp = (*it);
  79. tmp.c -= a[i].c;
  80. re -= a[i].c;
  81. S.erase(it);
  82. S.insert(tmp);
  83. break;
  84. }
  85. a[i].c -= (*it).c;
  86. re -= (*it).c;
  87. S.erase(it);
  88. it = it2;
  89. }
  90. }
  91. }
  92. printf("%lld\n", re);
  93. return ;
  94. }

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. 修改centos7命令行控制台屏幕分辨率

    1) vi /etc/sysconfig/grub 2)  GRUB_CMDLINE_LINUX 在rhgb前加 vga=0x0317  (317为分辨率编码) 3) grub2-mkconfig - ...

  2. Pychar调用远程编译器的环境配置

    版本:2019最新专业版

  3. 2019年12月4日 Linux总结

    System V init运行级别 systemd目标名称 作用 0 runlevel0.target,poweroff.target 关机 1 runlevel1.target,poweroff.t ...

  4. 【C/C++开发】内存对齐(内存中的数据对齐)、大端模式及小端模式

    数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍.DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽.X86 CPU能直接访问对齐的数据,当它试图访问一个未对齐的数据 ...

  5. 总结几个最近处理问题中使用http协议的代码

    demo1:几个不同的http请求方式总结: ----------------------------------------------------------------------------- ...

  6. Hbuilder连接苹果手机

    最简单的连接方法 1     手机电脑连接---usb 2     pc下载iTunes 3     信任电脑,手机信任设备(设置--->通用--->设备管理-->信任) 4     ...

  7. The request was aborted: Could not create SSL/TLS secure channel

    一.背景: 公司底层服务CDN从Akamai迁移到阿里云之后, 使用该服务的一个应用报错如下: System.AggregateException: One or more errors occurr ...

  8. 剑指offer56:删除链表中重复的结点,排序的链表中,删除重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

    1 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处 ...

  9. 烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解

    烧脑!CMU.北大等合著论文真的找到了神经网络的全局最优解 机器之心 ​ 已认证的官方帐号 811 人赞同了该文章 选自arXiv,作者:Simon S. Du.Jason D. Lee.Haochu ...

  10. 北京大学1001ACM——高精度类型题总结

    题目描述: ExponentiationTime Limit: 500MS   Memory Limit: 10000KTotal Submissions: 80517   Accepted: 190 ...