先将整张图$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. Blazor Webassembly多标签页开发

    最近准备用Blazor Webassembly做后台开发要用到多标签页,找了半天发现绝大多数都是Blazor Server的多标签没有Webassembly.没办法只能自己想办法造轮子了. 查了许多资 ...

  2. 使用node-gyp编写简单的node原生模块

    通过样例,让我们了解如何编写一个node的原生模块.当然,这篇文章还有一个目的,是为了方便以后编写关于node-gyp的文章,搭建初始环境. 基于node-addon-api 基于node-addon ...

  3. 6岁!是时候重新认识下Serverless了

    一.背景 Serverless 概念从2012年开始提出,真正推出相关云产品是2014年AWS推出Lambda.如果我们将 Serverless 比作一个婴儿,那么它已经6岁了. 虽然业界对Serve ...

  4. Geostatistical Analyst Tools(Geostatistical Analyst 工具)

    Geostatistical Analyst 工具 1.使用地统计图层 # Process: GA 图层至格网 arcpy.GALayerToGrid_ga("", 输出表面栅格, ...

  5. Java(29)集合四Collections

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228439.html 博客主页:https://www.cnblogs.com/testero ...

  6. ubuntu16.04安装klee

    ubuntu16.04安装klee(基于llvm 3.8)教程 前言 查阅了很多资料,踩了不少的坑,总的来说,这个应该是比较完善的基于llvm3.8和ubuntu16.04的安装教程,至少我自己按照这 ...

  7. Linux常用命令查看文件、别名、切换目录、创建目录、查看当前目录

    一.创建条件(使用liunx常用命令): 1.查看阿里云的环境是否搭建完成 首先快捷键 win+R 输入cmd 回车,打开命令提示符输入命令 ssh,回车.  2.登录阿里云账户 输入命令格式:ssh ...

  8. jquery-无缝滚动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 使用vuex简单的实现系统中的状态管理

    最近项目中用到了vue,其中状态的集中管理使用到了vuex,因此就学习vuex做一个简单的记录.vuex的官方网址如下: https://vuex.vuejs.org/zh-cn/  vuex 当我们 ...

  10. poj 2226 Muddy Fields(最小点覆盖)

    题意: M*N的矩阵,每个格不是*就是#.     *代表水坑,#代表草地. 农民要每次可以用一块宽为1,长不限的木板去铺这个矩阵.要求这块木板不能覆盖草地.木板可以重复覆盖(即一块木板与另一块木板有 ...