先将整张图$x$和$y$​都缩小一半,即"道路"长度变为1,"长椅"变为放在格子中心

如果在没有长椅的限制下也无解(直接dfs即可判定),显然原问题也无解

否则,将所有格子(注意不是点)黑白染色,并强制横向道路(即从$(x,y)$到$(x+1,y)$的道路,纵向同理)对应的长椅在黑色格子的中心、纵向道路对应的长椅在白色格子的中心

在这个限制(构造)下,长椅的限制即变为黑(白)色格子的上下(左右)两边不同时为横(纵)向道路

从上到下、从左到右依次贪心选边(能选即选),简单画图不难发现合法

为了方便,可以使用map维护,复杂度为$o(n\log n)$

 1 #include<bits/stdc++.h>
2 #include"parks.h"
3 using namespace std;
4 #define N 200005
5 #define vi vector<int>
6 #define pii pair<int,int>
7 #define mp make_pair
8 #define fi first
9 #define se second
10 int n,id[N],f[N];
11 pii a[N];
12 vi ansu,ansv,ansa,ansb;
13 map<int,int>mat[N],vis[N];
14 bool cmp(int x,int y){
15 return a[x]<a[y];
16 }
17 int find(int k){
18 if (k==f[k])return k;
19 return f[k]=find(f[k]);
20 }
21 void add(int x,int y,pii z){
22 vis[z.fi][z.se]=1;
23 f[find(x)]=find(y);
24 ansu.push_back(x-1);
25 ansv.push_back(y-1);
26 ansa.push_back(z.fi*2+1);
27 ansb.push_back(z.se*2+1);
28 }
29 int construct_roads(vi x,vi y){
30 n=x.size();
31 for(int i=1;i<=n;i++){
32 a[i]=mp(x[i-1]/2,y[i-1]/2);
33 id[i]=f[i]=mat[a[i].fi][a[i].se]=i;
34 }
35 sort(id+1,id+n+1,cmp);
36 for(int j=1;j<=n;j++){
37 int i=id[j],k=mat[a[i].fi+1][a[i].se];
38 if ((k)&&(find(i)!=find(k))){
39 if ((a[i].fi+a[i].se)&1)add(i,k,a[i]);
40 else{
41 if (!vis[a[i].fi][a[i].se-1])add(i,k,mp(a[i].fi,a[i].se-1));
42 }
43 }
44 k=mat[a[i].fi][a[i].se+1];
45 if ((k)&&(find(i)!=find(k))){
46 if ((a[i].fi+a[i].se)%2==0)add(i,k,a[i]);
47 else{
48 if (!vis[a[i].fi-1][a[i].se])add(i,k,mp(a[i].fi-1,a[i].se));
49 }
50 }
51 }
52 for(int i=1;i<=n;i++)
53 if (find(i)!=find(1))return 0;
54 build(ansu,ansv,ansa,ansb);
55 return 1;
56 }

[loj3525]喷泉公园的更多相关文章

  1. UOJ #58 【WC2013】 糖果公园

    题目链接:糖果公园 听说这是一道树上莫队的入门题,于是我就去写了--顺便复习了一下莫队的各种姿势. 首先,我们要在树上使用莫队,那么就需要像序列一样给树分块.这个分块的过程就是王室联邦这道题(vfle ...

  2. UOJ58 【WC2013】糖果公园

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  3. web主题公园版权信息破解:script.js加密文件

    很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园) ...

  4. Canvas 实现七彩喷泉

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  6. TYVJ1427 小白逛公园

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个 ...

  7. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

  8. 国内首家VR虚拟现实主题公园即将在北京推出

    近期,美国“The VOID”.澳洲“Zero Latency”两大虚拟现实主题乐园让许多爱好者兴奋至极,门票据说都已经预约到明年2月!在如此巨大的商机面前,谁将抢到国内VR虚拟现实主题公园第一块蛋糕 ...

  9. bzoj 3052: [wc2013]糖果公园 带修改莫队

    3052: [wc2013]糖果公园 Time Limit: 250 Sec  Memory Limit: 512 MBSubmit: 506  Solved: 189[Submit][Status] ...

随机推荐

  1. keeplived高可用配置

    前提:关闭防火墙,关闭selinux 1.主备配置 主 vim keeplived-lb01.confglobal_defs { router_id LVS_01 } vrrp_instance VI ...

  2. bzoj2037 Sue的小球(区间dp,考虑到对未来的贡献)

    ​​​​​​​​​​​​​​大致意思就是现在你要不断的奔跑到不同的地点去接球,每一秒可以移动一个单位长度,而你接到一个球的动作是瞬间的,收益是y[i]-t*v[i] 然后呢,要求分数最高. 起初看这个 ...

  3. SudokuSolver 2.0:用C++实现的数独解题程序 【一】

    SudokuSolver 2.0 实现效果 H:\Read\num\Release>sudoku.exe Order please: Sudoku Solver 2.0 2021/10/2 by ...

  4. 【UE4 C++ 基础知识】<7> 容器——TSet

    概述 TSet是一种快速容器类,(通常)用于在排序不重要的情况下存储唯一元素. TSet 类似于 TMap 和 TMultiMap,但有一个重要区别:TSet 是通过对元素求值的可覆盖函数,使用数据值 ...

  5. 异常大讨论-抛出异常还是返回false

    iteye精华帖之异常大讨论 原帖链接http://www.iteye.com/topic/2038 Robbin的观点 观点1:Exception实际上代表了一个UseCase中的异常流的处理. 绝 ...

  6. RBAC 权限管理模型

    一.RBAC模型--基于角色的访问控制 什么是RBAC RBAC(Role-Based Access Control)基于角色的访问控制.这是从传统的权限模型的基础之上,改进而来并且相当成熟的权限模型 ...

  7. 热身训练1 Blood Cousins Return

    点此看题 简要题面: 一棵树上有n个节点,每个节点有对应的名字(名字可重复). 每次询问,求深度比$vi$多$ki$的$vi$的儿子中,有多少种名字 分析: Step1: 我们可以懂$DFS$轻松找到 ...

  8. 记录编译QGIS(3.4+Qt5.11+VS2015)的整个过程

    编译运行整个QGIS耗时耗力,由于本人比较愚钝,来来回回花了大概两个星期最终编译成功,记录一下整个过程,一方面备忘,另一方面可能也给别人一点借鉴. 1.准备工作 参考了许多网上的教程,李民录大神的&l ...

  9. python基础语法--字典的遍历

    原文链接:https://blog.csdn.net/normang/article/details/55804231 (1)遍历key值 >>> a {'a': '1', 'b': ...

  10. SpringCloud微服务实战——搭建企业级开发框架(九):使用Nacos发现、配置和管理微服务

    Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台,Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置 ...