题目描述:

bz

luogu

题解:

把坐标系看反了持续$WA$系列。

对偶图+并查集维护。

先处理出树对树、树对墙的空隙,然后把人和空隙按从小到大排序。

用并查集维护四面墙之间是否能互相隔断。

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 2550;
const int M = 100050;
const double eps = 1e-6;
template<typename T>
inline void read(T&x)
{T f = 1,c = 0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}x = f*c;
}
int n,m,X[2],Y[2],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*=2;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[0])==findff(X[1]);}
bool cY(){return findff(Y[0])==findff(Y[1]);}
int Xi[4]={0,0,1,1},Yi[4]={0,1,1,0};
bool cC(int cn){return findff(X[Xi[cn]])==findff(Y[Yi[cn]]);}
void ot(int x)
{for(int i=0;i<4;i++)if(ans[x]&(1<<i))putchar('1'+i);puts("");
}
int main()
{read(n),read(m);scanf("%lf%lf",&W,&H);X[0] = n+1,X[1] = n+2,Y[0] = n+3,Y[1] = n+4;for(int i=1;i<=n+4;i++)ff[i]=i;for(int i=1;i<=n;i++){t[i].rd();h[++tot] = Hole(t[i].x-t[i].r,i,Y[0]);h[++tot] = Hole(t[i].y-t[i].r,i,X[0]);h[++tot] = Hole(W-t[i].x-t[i].r,i,Y[1]);h[++tot] = Hole(H-t[i].y-t[i].r,i,X[1]);}for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)h[++tot] = Hole(dis(i,j)-t[i].r-t[j].r,i,j);for(int i=1;i<=m;i++)p[i].rd(i);sort(p+1,p+1+m,vmp),sort(h+1,h+1+tot,cmp);for(int i=1,j=1;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]=(1<<cc);continue;}if(cx&&cy)ans[p[i].id]=(1<<cc);else if(cx&&!cy)ans[p[i].id]=((1<<cc)|(1<<(cc^3)));else if(!cx&&cy)ans[p[i].id]=((1<<cc)|(1<<(cc^1)));else ans[p[i].id]=15;for(int cn=0;cn<4;cn++)if(cC(cn)&&(ans[p[i].id]&(1<<cn)))ans[p[i].id]^=(1<<cn);}for(int i=1;i<=m;i++)ot(i);return 0;
}

View Code

转载于:https://www.cnblogs.com/LiGuanlin1124/p/10825146.html

bzoj5183 [Baltic2016]Park相关推荐

  1. B. Om Nom and Dark Park

    B. Om Nom and Dark Park 在满二叉树上的某些边上添加一些值.使得根节点到叶子节点的路径上的权值和都相等.求最少需要添加多少. 我们利用性质解题.   考察兄弟节点.由于他们从跟节 ...

  2. 耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park

    简评:国外大佬复刻 Apple Park,看了一下细节,确实厉害!只有你想不到,没有乐高拼不起来的,有没有乐高大神挑战一下? 苹果公园以各种各样的方式鼓舞人心,让人感兴趣.从建筑.可持续性和成本,到像 ...

  3. 倒车辅助Park Assist

    from: http://blog.csdn.net/viewcode/article/details/21048935 倒车辅助Park Assist快速发展,无论是前装还是后装,都已比较成熟了. ...

  4. JUC并发编程八 并发架构--park,unpark

    wait,notify和notifyAll必须配合 Object Monitor一起使用.而park,unpark不用. park 和 unpark是以线程为单位阻塞和唤醒线程.而notify只能随机 ...

  5. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 Claire and her little friend, ykwd, are travelli ...

  6. OFDM同步算法之Park算法

    park算法代码 训练序列结构 T=[\(C\) \(D\) \(C^{*}\) \(D^{*}\)],其中C表示由长度为N/4的复伪随机序列PN,ifft变换得到的符号序列 \(C(n) = D(N ...

  7. java 中断线程 wait_Java 线程中断(interrupt)与阻塞 (park)的区别

    很多Java开发人员(包括我),尤其是刚进入软件行业的新手,认为Java设置线程中断就是表示线程停止了,不往前执行了, Thread.currentThread().interrupt() 其实不是这 ...

  8. 【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露

    1. 报错信息 2021-10-29 08:44:56 WARN [,,,] [main] o.a.c.loader.WebappClassLoaderBase - The web applicati ...

  9. 密码学系列之:明文攻击和Bletchley Park

    文章目录 简介 crib和明文攻击 布莱奇利公园(Bletchley Park) 简介 明文攻击就是指已经知道了部分明文和它对应的加密后的字段,从而可以推测出使用的加密手段或者密码本.明文攻击这个故事 ...

最新文章

  1. MYSQL编译参数详解
  2. Toon Boom Harmony 20v20.0中文版
  3. linux命令之查看当前shell环境变量-env
  4. 订体育馆订健身房的方法
  5. How does a relational database work
  6. JavaScript 是传值调用还是传引用调用?
  7. mysql to char 用法_postgresql 中的to_char()常用操作
  8. 【OpenCV】腐蚀膨胀
  9. 【Kali】Kali在线安装详细教程【全】
  10. php解析shapefile,Fiona简介及Shapefile数据读取
  11. 来看一场开发者大会,缘何引来千人盛况
  12. 【Oracle】并行等待之PX Deq: Table Q Normal
  13. python几岁开始学比较好_少儿编程到底几岁开始学合适?
  14. 使用CKRule实现PVC配方计算
  15. 大疆 芯片开发 面经
  16. 计算机中存储的数据类型
  17. 西北乱跑娃 --- python类方法重写
  18. python战反爬虫:爬取猫眼电影数据 (一)(Requests, BeautifulSoup, MySQLdb,re等库)
  19. 软件目录【20年7月】
  20. 无人超市信息管理系统——可行性研究

热门文章

  1. JAVA GUI重要知识点学习心得
  2. java并发编程之Semaphore
  3. linux分配iomem,Linux中__iomem
  4. php grid 分页,jqGrid实现前端分页
  5. c语言流程图char,求救!各位大神,用程序流程图怎么描述下面这个???
  6. java堆中的组成部分,初识Java虚拟机的基本结构 | If Coding
  7. 计算机删除百度云盘图标,win10系统百度云盘图标删除的操作方法
  8. 再次携号转网_湖北省通信管理局召开视频会议 再次强调携号转网服务要求
  9. 重新理解“无容灾不上云”:应用多活将成为云原生容灾新趋势
  10. 混合云应用双活容灾实践