Description

\(n\) 个炸弹,每个炸弹有两个放置点,可以任选一个,问你最大的半径是多少.

Sol

二分+2-SAT+Tarjan.

首先二分一下答案.然后就成了一个2-SAT问题.

建模就是, \(i\) 如果和 \(j\) 的距离超过 \(x*2\),那么 \(i\) 只能选择 \(j\) ^ \(1\) 连边,同时 \(j\) 只能选择 \(i\) ^ \(1\) 连边.

最后用Tarjan所以下环,如果两个点在一个环中,那么就不合法.

Code

#include <bits/stdc++.h>
using namespace std; #define F first
#define S second
#define mpr make_pair
#define sqr(x) ((x)*(x))
const int N = 205;
const double eps = 1e-5;
typedef pair< int,int > pr;
typedef pair< pr,pr > prr; int n,c,cnt,cntb;
pr a[N];
vector< int > g[N];
int d[N],b[N];
int stk[N],instk[N],top; inline int in(int x=0) { scanf("%d",&x);return x; }
void clr() {
cntb=cnt=top=0;
for(int i=0;i<N;i++) g[i].clear();
memset(d,0,sizeof(d)),memset(b,0,sizeof(b)),memset(instk,0,sizeof(instk));
}
double Dist(pr x,pr y) { return sqrt((double)sqr(x.F-y.F)+sqr(x.S-y.S)); }
void Tarjan(int u,int fa) {
d[u]=++cnt,stk[++top]=u,instk[u]=1;int dfsn=cnt;
for(int i=0,v;i<(int)g[u].size();i++) if((v=g[u][i])!=fa) {
if(!d[v]) Tarjan(v,u);
if(instk[v]) d[u]=min(d[u],d[v]);
}
if(d[u]==dfsn) {
for(++cntb;stk[top]!=u;top--) {
b[stk[top]]=cntb,instk[stk[top]]=0;
}b[stk[top]]=cntb,instk[stk[top--]]=0;
}
// cout<<u<<":"<<d[u]<<" "<<dfsn<<endl;
}
int check(double x) {
clr();
for(int i=0;i<c;i++) for(int j=i&1 ? i+1 : i+2;j<c;j++)
if(Dist(a[i],a[j])<x*2) g[i].push_back(j^1),g[j].push_back(i^1);
// cout<<"("<<i<<","<<j<<")"<<Dist(a[i],a[j])<<endl,
for(int i=0;i<c;i++) if(!d[i]) Tarjan(i,i); /* cout<<x<<endl;
for(int i=0;i<c;i++) {
cout<<i<<":"<<endl;
for(int j=0;j<(int)g[i].size();j++) cout<<g[i][j]<<" ";
cout<<endl;
}
for(int i=0;i<c;i++) cout<<b[i]<<" ";cout<<endl;
cout<<"-------------------------"<<endl;*/ for(int i=0;i<c;i++) if(b[i]==b[i^1]) return 0;
return 1;
}
int main() {
// freopen("in.in","r",stdin);
while(~scanf("%d",&n)) {
c=0;
for(int i=1;i<=n;i++) {
int x=in(),y=in();
a[c++]=mpr(x,y);
x=in(),y=in();
a[c++]=mpr(x,y);
}
double l=0.0,r=20000.0,mid;
while(r-l > eps) {
mid=(l+r)/2.0;
if(check(mid)) l=mid;
else r=mid;
}printf("%.2lf\n",mid);
}return 0;
}

  

HDU 3622 Bomb Game的更多相关文章

  1. HDU 3622 Bomb Game(2-sat)

    HDU 3622 Bomb Game 题目链接 题意:求一个最大半径,使得每一个二元组的点任选一个,能够得到全部圆两两不相交 思路:显然的二分半径,然后2-sat去判定就可以 代码: #include ...

  2. HDU 3622 Bomb Game(二分+2-SAT)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. hdu 3622 Bomb Game(二分+2-SAT)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. HDU 3622 Bomb Game(2-sat)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. HDU 3622 Bomb Game(二分+2SAT)

    题意:有一个游戏,有n个回合,每回合可以在指定的2个区域之一放炸弹,炸弹范围是一个圈,要求每回合的炸弹范围没有重合.得分是炸弹半径最小的值.求可以得到的最大分数. 思路:二分+2SAT. 二分炸弹范围 ...

  6. hdu 3622 Bomb Game【二分+2-SAT+tarjan】

    用read()会挂 二分半径,显然最优的是所有原都用这个最小半径,然后2-SAT把相交的圆建图,跑tarjan判一下可行性即可 #include<iostream> #include< ...

  7. HDU - 3622 Bomb Game(二分+2-SAT)

    题目大意:玩一个放炸弹游戏,有N次放炸弹的机会,每次放炸弹时,你都有两个位置能够选择.问怎样放炸弹,能使爆炸的炸弹的半径的最小值最大(炸弹爆炸半径能够控制,可是爆炸形成的圈不能有重叠部分) 解题思路: ...

  8. HDU 5934 Bomb(炸弹)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  9. 数位DP入门之hdu 3555 Bomb

    hdu 3555 Bomb 题意: 在1~N(1<=N<=2^63-1)范围内找出含有 ‘49’的数的个数: 与hdu 2089 不要62的区别:2089是找不不含 '4'和 '62'的区 ...

随机推荐

  1. [No00005B] word快速插入当前时间&怎样一次性删除文档中的全部链接

    按Alt+Shift+D键来插入系统日期 按Alt+Shift+T键则插入系统当前时间 同时,在插入的时间上右键->编辑域 一次性删除文档中的全部链接: 方法1:一劳永逸法(推荐) 因为链接大多 ...

  2. linux系统下的权限知识梳理

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

  3. Tomcat server.xml配置示例

    本文由 ImportNew 几乎所有容器类型的应用都会包含一个名为 server.xml 的文件结构.基本上,其中的每个元数据或者配置都是容器完成初始化所需要的.正是由于这些内容都是可配置的,使得软件 ...

  4. JS实现Observable观察者模式

    欢迎讨论与交流 : ) 注 代码参考自——汇智网 RxJS教程 前言 Observable观察者模式令小白笔者眼前一亮.数据生产者(observable)负责生产新鲜的数据,同时在生产完毕后'通知“消 ...

  5. React官网学习笔记

    欢迎指导与讨论 : ) 前言 本文主要是笔者在React英文官网学习时整理的笔记.由于笔者水平有限,如有错误恳请指出 O(∩_∩)O 一 .Tutoial 篇 1 . React的组件类名的首字母必须 ...

  6. 【ASP.NET实战教程】ASP.NET实战教程大集合,各种项目实战集合

    [ASP.NET实战教程]ASP.NET实战教程大集合,各种项目实战集合,希望大家可以好好学习教程中,有的比较老了,但是一直很经典!!!!论坛中很多小伙伴说.net没有实战教程学习,所以小编连夜搜集整 ...

  7. 一道有意思的笔试题引发的对于new操作符的思考

    楼主比较喜欢看一些很短但很有意思的题目,无意间又瞥到了一题,大家不妨可以一试.(原题链接猛戳这里) function Fn1() { this.name = 'peter'; return { nam ...

  8. 利用python合并两个文件

    1格式如下 在做利用zabbix的api来批量添加主机的时候,需要处理ip和hostname,在借用别人写的py程序的基础上,自己有改装了以下脚本,为自己使用.需要时ip和hostname为一个统一格 ...

  9. 用php去除bom头

    最近在用dede开发一个网站的时候,发现网站在本地没什么问题,但是上传到服务器上面去之后,在首页会默认的生成一串的字符串,如下图所示: 百度了之后,发现好多的解决方法都是说的把文件存储为utf-8无 ...

  10. nginx 反向代理

    nginx 反向代理 vim nginx.conf http { ..... upstream "tomcatweb" { server 172.30.13.199:8080; s ...