bzoj5183 [Baltic2016]Park
题目描述:
题解:
把坐标系看反了持续$WA$系列。
对偶图+并查集维护。
先处理出树对树、树对墙的空隙,然后把人和空隙按从小到大排序。
用并查集维护四面墙之间是否能互相隔断。
代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
const int M = ;
const double eps = 1e-;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,m,X[],Y[],ff[N];
double W,H;
int findff(int x){return x==ff[x]?x:ff[x]=findff(ff[x]);}
struct Tree
{
double x,y,r;
void rd(){scanf("%lf%lf%lf",&x,&y,&r);}
}t[N];
double sqr(double k){return k*k;}
double dis(int i,int j){return sqrt(sqr(t[i].x-t[j].x)+sqr(t[i].y-t[j].y));}
int tot;
struct Hole
{
double k;
int x,y;
Hole(){}
Hole(double k,int x,int y):k(k),x(x),y(y){}
}h[N*N];
bool cmp(Hole a,Hole b){return a.k<b.k;}
int ans[M];
struct Peo
{
double r;
int c,id;
void rd(int i){scanf("%lf",&r),r*=;read(c),c--;id=i;}
}p[M];
bool vmp(Peo a,Peo b){return a.r<b.r;}
void merge(int x,int y)
{
x = findff(x),y = findff(y);
if(x!=y)ff[x]=y;
}
bool cX(){return findff(X[])==findff(X[]);}
bool cY(){return findff(Y[])==findff(Y[]);}
int Xi[]={,,,},Yi[]={,,,};
bool cC(int cn){return findff(X[Xi[cn]])==findff(Y[Yi[cn]]);}
void ot(int x)
{
for(int i=;i<;i++)if(ans[x]&(<<i))
putchar(''+i);
puts("");
}
int main()
{
read(n),read(m);
scanf("%lf%lf",&W,&H);
X[] = n+,X[] = n+,Y[] = n+,Y[] = n+;
for(int i=;i<=n+;i++)ff[i]=i;
for(int i=;i<=n;i++)
{
t[i].rd();
h[++tot] = Hole(t[i].x-t[i].r,i,Y[]);
h[++tot] = Hole(t[i].y-t[i].r,i,X[]);
h[++tot] = Hole(W-t[i].x-t[i].r,i,Y[]);
h[++tot] = Hole(H-t[i].y-t[i].r,i,X[]);
}
for(int i=;i<=n;i++)for(int j=i+;j<=n;j++)
h[++tot] = Hole(dis(i,j)-t[i].r-t[j].r,i,j);
for(int i=;i<=m;i++)p[i].rd(i);
sort(p+,p++m,vmp),sort(h+,h++tot,cmp);
for(int i=,j=;i<=m;i++)
{
while(h[j].k+eps<p[i].r&&j<=tot)
merge(h[j].x,h[j].y),j++;
bool cx = cX(),cy = cY();int cc = p[i].c;
if(cC(cc)){ans[p[i].id]=(<<cc);continue;}
if(cx&&cy)ans[p[i].id]=(<<cc);
else if(cx&&!cy)ans[p[i].id]=((<<cc)|(<<(cc^)));
else if(!cx&&cy)ans[p[i].id]=((<<cc)|(<<(cc^)));
else ans[p[i].id]=;
for(int cn=;cn<;cn++)
if(cC(cn)&&(ans[p[i].id]&(<<cn)))ans[p[i].id]^=(<<cn);
}
for(int i=;i<=m;i++)ot(i);
return ;
}
bzoj5183 [Baltic2016]Park的更多相关文章
- 【bzoj5183】[Baltic2016]Park 离线+对偶图+并查集
题目描述 在Byteland的首都,有一个矩形围栏围起来的公园.在这个公园里树和访客都以一个圆形表示.公园有四个出入口,每个角落一个(1=左下角,2=右下角,3=右上角,4=左上角).访客能通过这些出 ...
- hdu4607 Park Visit(树的直径)
Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Codeforces Round #292 (Div. 1) C. Drazil and Park 线段树
C. Drazil and Park 题目连接: http://codeforces.com/contest/516/problem/C Description Drazil is a monkey. ...
- 转:php park、unpark、ord 函数使用方法(二进制流接口应用实例)
在工作中,我也逐渐了解到park,unpark,ord对于二进制字节处理的强大. 下面我逐一介绍它们. park,unpark,ord这3个函数,在我们工作中,用到它们的估计不多. 我在最近一 ...
- Kefa and Park
#include<bits/stdc++.h> #define max 100005 using namespace std; int cats[max]; vector<int&g ...
- UVALive 4221 Walk in the Park 扫描线
Walk in the Park 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemi ...
- B. Om Nom and Dark Park
B. Om Nom and Dark Park 在满二叉树上的某些边上添加一些值.使得根节点到叶子节点的路径上的权值和都相等.求最少需要添加多少. 我们利用性质解题. 考察兄弟节点.由于他们从跟节 ...
- Codeforces Round #321 (Div. 2) C. Kefa and Park dfs
C. Kefa and Park Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/probl ...
- LockSupport的park和unpark
LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语. Java锁和同步器框架的核心AQS:AbstractQueuedSynchronizer,就是通过调用Lo ...
随机推荐
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- linux 搭建unixODBC ,并对接 PostgreSQL 9.3.4
环境:suse 11 ,64位的操作系统 unixODBC 版本:2.3.2 PostgreSQL 9.3.4 1 编译安装 unixODBC 下载 unixODBC :http://www.unix ...
- .netcore--Controller后台实现企业微信发送消息
一.获得企业微信管理端权限,登录企业企业微信管理端界面,并创建应用,如下图中的[网站消息推送] 二.参见企业微信API文献,根据corpid=ID&corpsecret=SECRET(其中企业 ...
- dream(2018.10.17)
一句话题意:讲什么题意啊,见usaco2017feb silver的T1,一模一样,就是牛和鸡的读入顺序反过来了一下,数据范围大了10倍,卡掉了\(O(n^2)\)的算法. 数据范围: 对于 30%的 ...
- 51Nod 1242 斐波那契数列的第N项(矩阵快速幂)
#include <iostream> #include <algorithm> using namespace std; typedef long long LL; ; ; ...
- VLAN-6-VLAN Trunk协议(VTP)
VTP能够将VLAN配置信息通告给邻居交换机,这样做可以使工程师只在一台交换机上配置VLAN,同一个VTP域中的所有其他交换机动态学习这些VLAN信息.VTP通告VLAN ID.VLAN 名称和 VL ...
- django (四) model模型
models模型 1. models 定义属性 概述 django根据属性的类型确定以下信息 ·当前选择的数据库支持字段的类型 ·渲染管理表单时使用的默认html控件 ·在管理站点最低限度的验证 dj ...
- 2017 Multi-University Training Contest - Team 1 KazaQ's Socks
Problem Description KazaQ wears socks everyday. At the beginning, he has n pairs of socks numbered f ...
- Java EE学习笔记(七)
MyBatis的核心配置 1.MyBatis的核心对象 1).SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建Sql ...
- vs2013缺少Mvc 怎么办?
命名空间System.Web中不存在类型或命名空间名称Mvc是否缺少程序集引用? 以前vs2010或2012以前的引用一下就有了,为何现在vs2013没有,该这么处理呢?? 解决方案: 打开PCM: ...