传送门:Bomb Game

题意:给n对炸弹可以放置的位置(每个位置为一个二维平面上的点),每次放置炸弹是时只能选择这一对中的其中一个点,每个炸弹爆炸的范围半径都一样,控制爆炸的半径使得所有的爆炸范围都不相交(可以相切),求解这个最大半径.

分析:二分距离,由two-sat判可行性,建图时对于每两个炸弹的两个位置,互相判断一下是否冲突,冲突就建边。

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 210
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
struct edge
{
int v,next;
edge() {}
edge(int v,int next):v(v),next(next) {}
} e[N*N];
int n,m,scc,step,top,tot;
int head[N],dfn[N],low[N],belong[N],Stack[N];
bool instack[N];
void init()
{
tot=;step=;
scc=;top=;
FILL(head,-);
FILL(dfn,);
FILL(low,);
FILL(instack,false);
}
void addedge(int u,int v)
{
e[tot]=edge(v,head[u]);
head[u]=tot++;
}
void tarjan(int u)
{
int v;
dfn[u]=low[u]=++step;
Stack[top++]=u;
instack[u]=true;
for(int i=head[u]; ~i; i=e[i].next)
{
v=e[i].v;
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(instack[v])
{
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u])
{
scc++;
do
{
v=Stack[--top];
instack[v]=false;
belong[v]=scc;
}
while(v!=u);
}
}
int judge()
{
for(int i=; i<*n; i++)
if(!dfn[i])tarjan(i);
for(int i=; i<n; i++)
{
if(belong[i<<]==belong[i<<^])
{
return ;
}
}
return ;
} int lx[],ly[],rx[],ry[];
double dist(int a,int b,int x,int y)
{
return sqrt((double)(a-x)*(a-x)+(double)(b-y)*(b-y));
}
void build(double m)
{
for(int i=;i<n;i++)
for(int j=i+;j<n;j++)
{
if(dist(lx[i],ly[i],lx[j],ly[j])+eps<*m)addedge(i<<,j<<|),addedge(j<<,i<<|);
if(dist(lx[i],ly[i],rx[j],ry[j])+eps<*m)addedge(i<<,j<<),addedge(j<<|,i<<|);
if(dist(rx[i],ry[i],lx[j],ly[j])+eps<*m)addedge(i<<|,j<<|),addedge(j<<,i<<);
if(dist(rx[i],ry[i],rx[j],ry[j])+eps<*m)addedge(i<<|,j<<),addedge(j<<|,i<<);
}
}
void solve()
{
double l=,r=,ans=;
while(r-l>eps)
{
double m=(l+r)/;
init();
build(m);
if(judge())
{
ans=m;l=m;
}
else r=m;
}
printf("%.2f\n",ans);
}
int main()
{
int a,b,c,u,v;
char op[];
while(scanf("%d",&n)>)
{
for(int i=;i<n;i++)
{
scanf("%d%d%d%d",&lx[i],&ly[i],&rx[i],&ry[i]);
}
solve();
}
}

hdu3622(二分+two-sat)的更多相关文章

  1. HDU3622(二分+2-SAT)

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

  2. hdu3622 二分+2sat

    题意:      给你N组炸弹,每组2个,让你在这N组里面选取N个放置,要求(1)每组只能也必须选取一个(2)炸弹与炸弹之间的半径相等(3)不能相互炸到对方.求最大的可放置半径. 思路:      二 ...

  3. hdu3622 2-sat问题,二分+判断有无解即可。

    /*2-sat问题初破!题意:每一对炸弹只能选一个(明显2-sat),每个炸弹半径自定,爆炸范围不可 相交,求那个最小半径的最大值(每种策略的最小半径不同).思:最优解:必然是选择的点最近 的俩个距离 ...

  4. HDU3622 Bomb Game(二分+2-SAT)

    题意 给n对炸弹可以放置的位置(每个位置为一个二维平面上的点), 每次放置炸弹是时只能选择这一对中的其中一个点,每个炸弹爆炸 的范围半径都一样,控制爆炸的半径使得所有的爆炸范围都不相 交(可以相切), ...

  5. 2 - sat 模板(自用)

    2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一  POJ 3207 Ikki's Story IV ...

  6. 证明与计算(3): 二分决策图(Binary Decision Diagram, BDD)

    0x01 布尔代数(Boolean algebra) 大名鼎鼎鼎的stephen wolfram在2015年的时候写了一篇介绍George Boole的文章:George Boole: A 200-Y ...

  7. Map Labeler POJ - 2296(2 - sat 具体关系建边)

    题意: 给出n个点  让求这n个点所能建成的正方形的最大边长,要求不覆盖,且这n个点在正方形上或下边的中点位置 解析: 当然是二分,但建图就有点还行..比较难想..行吧...我太垃圾... 2 - s ...

  8. LA 3211 飞机调度(2—SAT)

    https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...

  9. UVALive - 3211 (2-SAT + 二分)

    layout: post title: 训练指南 UVALive - 3211 (2-SAT + 二分) author: "luowentaoaa" catalog: true m ...

随机推荐

  1. android怎样实现自动点击功能

    一个按钮之类的控件的自动点击的话,可以定时调用 button.performClick();

  2. Microsoft Visual C++运行库合集下载(静默安装)

    Microsoft Visual C++运行库合集下载 CN启示录2013-06-02上传   Microsoft Visual C++运行库合集由国外网友McRip制作,包含了VC2005.VC20 ...

  3. Spring boot jar 后台运行

    start(){ now=`date "+%Y%m%d%H%M%S"` exec java -Xms256m -Xmx512m -jar /alidata/server/webap ...

  4. 基本HTML5文件结构

    作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/28129039 基本HTML5文件结构: <!--<!D ...

  5. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  6. crm使用FetchXml聚合查询

    /* 创建者:菜刀居士的博客  * 创建日期:2014年07月08号  */ namespace Net.CRM.FetchXml {     using System;     using Micr ...

  7. C++学习之路—继承与派生(四)拓展与总结

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1    拓展部分 本节主要由两部分内容组成,分 ...

  8. Servlet的学习(二)

    本篇接上一篇<Servlet的学习(一)>,讲述如何利用MyEclipse来创建web工程, 同时讲述如何在MyEclipse中配置Tomcat服务器. 在MyEclipse中,新建“We ...

  9. 如何在一个jpg图片上面叠加文字

    1.将jpg转为bmp格式 2.在bmp文件上写上所需文字 3.将写入文字的bmp文件重新转为jpg格式 http://dev.csdn.net/develop/article/22/22948.sh ...

  10. 14.9.4 COMPACT and REDUNDANT Row Formats

    14.9.4 COMPACT and REDUNDANT Row Formats InnoDB 早期的版本 使用一种未命名的文件格式(现在称为Antelope(羚羊)) 对于数据库文件 在这种文件格式 ...