这题真tm是醉了。

就是对于每个亲戚,利用其它的亲戚对他半平面交求出其控制的范围,然后随便跑个最短路就行了

n=0卡了我一下午//////

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define N 666
#define eps 1e-12
using namespace std;
int g[N][N];
struct point{
double x[];
point(){}
point(double a,double b){x[]=a,x[]=b;}
double & operator [] (int a){return x[a];}
}p[N];
double dis(point a,point b){
return sqrt((b[]-a[])*(b[]-a[])+(b[]-a[])*(b[]-a[]));
}
struct line{
double a,b,c,k;
int id;
line(){}
line (double x,double y,double z,int pos){
a=x;b=y;c=z;
k=atan2(-x,y);id=pos;
}
void rev(){
a=-a;b=-b;c=-c;
k=atan2(-a,b);
}
}l[N],q[N];
int T,n,bot,tot,top,be,ans;
double wx,wy,sx,sy,d;
bool cmp(line a,line b){
if(fabs(a.k-b.k)<eps)return a.c<b.c;
return a.k<b.k;
}
point cross(line a,line b){
double x=(b.c*a.b-a.c*b.b)/(a.a*b.b-a.b*b.a);
double y=(b.c*a.a-a.c*b.a)/(a.b*b.a-a.a*b.b);
return point(x,y);
}
bool judge(point a,line b){
return a[]*b.a+a[]*b.b+b.c<-eps;
}
void addline (point a,point b,int id){
point c=point((a[]+b[])/,(a[]+b[])/);
if(a[]==b[])l[++tot]=line(0.0,1.0,-c[],id);
else if(a[]==b[])l[++tot]=line(1.0,0.0,-c[],id);
else l[++tot]=line(1.0,(b[]-a[])/(b[]-a[]),-c[]-(b[]-a[])/(b[]-a[])*c[],id);
if(judge(a,l[tot]))l[tot].rev();
}
void work(int x){
register int i,j;
sort(l+,l+tot+,cmp);
for(i=,j=;i<=tot;i++)
if(fabs(l[i].k-l[j].k)>=eps)l[++j]=l[i];
tot=j;
bot=;top=;
q[]=l[];q[]=l[];
for(i=;i<=tot;i++){
while(bot<top&&judge(cross(q[top-],q[top]),l[i]))top--;
while(bot<top&&judge(cross(q[bot+],q[bot]),l[i]))bot++;
q[++top]=l[i];
}
while(bot<top&&judge(cross(q[top-],q[top]),q[bot]))top--;
for(i=bot;i<=top;i++){
if(q[i].id)g[x][q[i].id]=g[q[i].id][x]=;
else g[x][n+]=g[n+][x]=;
}
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
if(!n){puts("");continue;}
memset(g,0x3f,sizeof g);
scanf("%lf%lf%lf%lf",&wx,&wy,&sx,&sy);
for(int i=;i<=n;i++)
scanf("%lf%lf",&p[i][],&p[i][]);
for(int i=;i<=n;i++){
tot=;
for(int j=;j<=n;j++)if(j!=i)
addline(p[i],p[j],j);
addline(p[i],point(-p[i][],p[i][]),);
addline(p[i],point(p[i][],-p[i][]),);
addline(p[i],point(*wx-p[i][],p[i][]),);
addline(p[i],point(p[i][],*wy-p[i][]),);
work(i);
}
d=g[][];ans=;
for(int i=;i<=n;i++){
double now=dis(point(sx,sy),p[i]);
if(now<d)d=now,be=i;
}
for(int k=;k<=n+;k++)
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
ans=g[be][n+]+;
printf("%d\n",ans);
}
return ;
}

bzoj3199 [Sdoi2013]escape的更多相关文章

  1. [BZOJ3199][SDOI2013]escape:半平面交

    分析 好像叫V图什么的. 容易发现,对于每个点,其监视的范围就是这个点与其它所有点的垂直平分线分割平面后的半平面交.由于数据范围很小,所以我们可以直接枚举每个点,使用双端队列求出其监视的范围.若两个点 ...

  2. BZOJ3199 SDOI2013 逃考 半平面交、最短路

    传送门 如果我们对于每一个点能找到与其相邻的点(即不经过其他点监视范围能够直接到达其监视范围的点)和是否直接到达边界,就可以直接BFS求最短路求出答案. 所以当前最重要的问题是如何找到对于每一个点相邻 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. 【JZOJ3297】【SDOI2013】逃考(escape)

    Mission 高考又来了,对于不认真读书的来讲真不是个好消息.为了小杨能在家里认真读书,他的亲戚决定驻扎在他的家里监督他学习,有爷爷奶奶.外公外婆.大舅.大嫂.阿姨-- 小杨实在是忍无可忍了,这种生 ...

  5. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  6. 简单明了区分escape、encodeURI和encodeURIComponent

    一.前言 讲这3个方法区别的文章太多了,但是大部分写的都很绕.本文试图从实践角度去讲这3个方法. 二.escape和它们不是同一类 简单来说,escape是对字符串(string)进行编码(而另外两种 ...

  7. c#模拟js escape方法

    public static string Escape(string s) { StringBuilder sb = new StringBuilder(); byte[] ba = System.T ...

  8. BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 960  Solved: 5 ...

  9. 【BZOJ-1340】Escape逃跑问题 最小割

    1340: [Baltic2007]Escape逃跑问题 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 264  Solved: 121[Submit] ...

随机推荐

  1. 解决ecshop3.6 H5版本公告页面为空的修改办法

    ecshop3.6公告页面打开如下,页面完全无效果,如下图. 经过简单美化后,有返回按钮,页面加以美化.如下图. 是不是要好看多了.简单修改几步即可. 修改文件 \appserver\resource ...

  2. Java反射之修改常量值

    1. 通过反射修改常量的值 package com.blueStarWei.invoke; import java.lang.reflect.Field; public class ModifyFin ...

  3. AngularJs 学习笔记(一)作用域

    AngularJs采用了注重时效的MVC方式,是基于MVW模式. 1.$scope和作用域的概念. AngularJs中的$scope对象是模板的域模型,也称作作用域实例,通过为其属性赋值,可以传递给 ...

  4. golang基础- ElasticSearch搜索引擎、kibana可视化工具、向ES输出数据

    转载自:https://blog.csdn.net/u013210620/article/details/78647366 安装ElasticSearch ElasticSearch是一个基于Luce ...

  5. Ocelot中文文档-流量控制

    感谢@catcherwong 的文章激励我最终写出了这个文档 Ocelot支持上游的请求限制,以便您的下游服务不会过载. 此功能是由GitHub上的@geffzhang添加! 非常感谢. 好了,为了让 ...

  6. JS实现数组去重的6种方法总结

    方法一: 双层循环,外层循环元素,内层循环时比较值,如果有相同的值则跳过,不相同则push进数组. Array.prototype.distinct = function(){ var arr = t ...

  7. DDGScreenShot—图片擦除功能

    写在前面 图片擦除功能,也是运用图片的绘制功能, 将图片绘制后,拿到相应的图片.当然,有一涨底图更明显 实现代码如下 /** ** 用手势擦除图片 - imageView --传图片 - bgView ...

  8. java之SpringMVC的controller配置总结

    先在springmvc-servlet.xml文件作如下配置(注解开发controller) <?xml version="1.0" encoding="UTF-8 ...

  9. 类设计:设计卖车的4S店

    class Car(object): # 定义车的方法 def move(self): print('---车在移动---') def stop(self): print('---停车---') # ...

  10. cocos2d-x 欢乐捕鱼游戏总结

    这几天一直都在做一个捕鱼游戏Demo,大概花掉了我快一个礼拜的时间.游戏主体是使用的cocos2d-x高级开发教程里面提供的小部分框架基本功能.然后自己加入所有的UI元素和玩法.变成了一个体验不错的捕 ...