[loj3525]喷泉公园
先将整张图$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]喷泉公园的更多相关文章
- UOJ #58 【WC2013】 糖果公园
题目链接:糖果公园 听说这是一道树上莫队的入门题,于是我就去写了--顺便复习了一下莫队的各种姿势. 首先,我们要在树上使用莫队,那么就需要像序列一样给树分块.这个分块的过程就是王室联邦这道题(vfle ...
- UOJ58 【WC2013】糖果公园
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- web主题公园版权信息破解:script.js加密文件
很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园) ...
- Canvas 实现七彩喷泉
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 【BZOJ-3052】糖果公园 树上带修莫队算法
3052: [wc2013]糖果公园 Time Limit: 200 Sec Memory Limit: 512 MBSubmit: 883 Solved: 419[Submit][Status] ...
- TYVJ1427 小白逛公园
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个 ...
- [vijos P1083] 小白逛公园
不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...
- 国内首家VR虚拟现实主题公园即将在北京推出
近期,美国“The VOID”.澳洲“Zero Latency”两大虚拟现实主题乐园让许多爱好者兴奋至极,门票据说都已经预约到明年2月!在如此巨大的商机面前,谁将抢到国内VR虚拟现实主题公园第一块蛋糕 ...
- bzoj 3052: [wc2013]糖果公园 带修改莫队
3052: [wc2013]糖果公园 Time Limit: 250 Sec Memory Limit: 512 MBSubmit: 506 Solved: 189[Submit][Status] ...
随机推荐
- Snipaste屏幕截图的使用
什么是Snipaste Snipaste是一款屏幕截图软件 类似于微信的截图 Snipaste使用步骤 百度搜索Snipaste 如图 点击 根据自己电脑系统选择安装 下载完成后 解压到当前文件夹 点 ...
- ApsNetCore打造一个“最安全”的api接口
Authentication,Authorization 如果公司交给你一个任务让你写一个api接口,那么我们应该如何设计这个api接口来保证这个接口是对外看起来"高大上",&qu ...
- Java8新特性——Lambda 表达式
Lambda 表达式 Lambda 表达式的实质属于函数式编程. 语法格式为:(parameters) -> expression ...
- 迁移appseting.json创建自定义配置中心
创建一个自定义的配置中心,将框架中各类配置,迁移至数据库,支持切换数据库,热重载. 说在前面的话 自使用.net Core框架以来,配置大多存在json文件中: [框架默认加载配置]文件为appset ...
- After Effects 图层属性及属性组结构详解
根据结构类型的属性分类 在 After Effects 的脚本开发中,图层的属性可被区分为三种类型:PROPERTY.INDEXED_GROUP 和 NAMED_GROUP .通过使用app.proj ...
- 初探区块链数字加密资产标准ERC721
ERC721介绍 数字加密货币大致可以分为原生币(coin)和代币(token)两大类.前者如BTC.ETH等,拥有自己的区块链.后者如Tether.TRON.ONT等,依附于现有的区块链.市场上流通 ...
- InstallScript脚本语言基本知识(一)
1.自定义函数 1 //函数的声明:prototype 返回值 函数名(形参类型1,...) 2 export prototype STRING GetPreDir(STRING); 3 4 //函数 ...
- FastAPI 学习之路(二十)接口文档配置相关
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- 2021-2022 20211420 《信息安全专业导论》安装Linux操作系统并学习Linux基础
作业信息 |作业属于|https://edu.cnblogs.com/campus/besti/2021-2022-1fois |作业要求|https://edu.cnblogs.com/campus ...
- HTML中的emment
emment的优点和使用方法: 优点:Emment是前端开发者必备的工具,使用它可以大大提高前端开发效率. 使用方法:Emment的使用方法非常简单,直接在编辑器上输入HTML和CSS代码的缩写,然后 ...