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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=205;
int n,h[N],cnt,dfn[N],low[N],tot,s[N],top,bl[N],col;
bool v[N];
struct qwe
{int ne,to;
}e[N*N*8];
struct dian
{double x,y;
}a[N],b[N];
double dis(dian a,dian b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int read()
{int r=0,f=1;char p=getchar();while(p>='9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void add(int u,int v)
{//cerr<<u<<" "<<v<<endl;cnt++;e[cnt].ne=h[u];e[cnt].to=v;h[u]=cnt;
}
void tarjan(int u)
{dfn[u]=low[u]=++tot;v[s[++top]=u]=1;for(int i=h[u];i;i=e[i].ne){if(!dfn[e[i].to]){tarjan(e[i].to);low[u]=min(low[u],low[e[i].to]);}else if(v[e[i].to])low[u]=min(low[u],dfn[e[i].to]);}if(low[u]==dfn[u]){col++;while(s[top]!=u){bl[s[top]]=col;v[s[top--]]=0;}bl[s[top]]=col;v[s[top--]]=0;}
}
bool ok(double w)
{//cerr<<w<<endl;memset(h,0,sizeof(h));memset(v,0,sizeof(v));memset(dfn,0,sizeof(dfn));cnt=0,tot=0,top=0,col=0;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){if(dis(a[i],a[j])<2.0*w)add(i,j+n),add(j,i+n);if(dis(a[i],b[j])<2.0*w)add(i,j),add(j+n,i+n);if(dis(b[i],a[j])<2.0*w)add(i+n,j+n),add(j,i);if(dis(b[i],b[j])<2.0*w)add(i+n,j),add(j+n,i);}for(int i=1;i<=n+n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)if(bl[i]==bl[i+n])return 0;return 1;
}
int main()
{while(~scanf("%d",&n)){for(int i=1;i<=n;i++)scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&b[i].x,&b[i].y);double l=0,r=1e4,ans=0;while(r-l>1e-3){double mid=(l+r)/2;if(ok(mid))l=mid,ans=mid;elser=mid;}printf("%.2f\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/9987136.html

hdu 3622 Bomb Game【二分+2-SAT+tarjan】相关推荐

  1. HDU 3622 Bomb Game / 2-SAT

    刚刚学 看到很多网上和书上有直接逐点判断的dfs暴力算法 加上今天事情特别多 看了半天 也可以用tarjan判断 这个有空在学 题意不用说了吧 就是求一个半径 n个炸弹吧 每个可以选择2个点之中的一个 ...

  2. hdu 3622 二分+2-sat

    /* 二分+2-sat 题意:在一个二维平面上给你n个炸弹,和2*n个位置,每一行的两个位置仅仅能有一个放炸弹 如今炸弹爆炸有一个半径.当炸弹爆炸时两个炸弹的半径化成的圆不能相交,求最大半径 二分半径 ...

  3. 【HDU 4547 CD操作】LCA问题 Tarjan算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4547 题意:模拟DOS下的cd命令,给出n个节点的目录树以及m次查询,每个查询包含一个当前目录cur和 ...

  4. HDU 3646 DP + 二分

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...

  5. hdu 5199 map或二分或哈希

    题目描述:给出n棵树的高度,每棵树上都站着一只鸟,枪手Jack站在最左边那棵树的左边对鸟进行射击,当Jack在高度为H的地方向右发射一颗子弹的时候,高度为H的树上的鸟儿就会掉落(注:其他树上的鸟儿不会 ...

  6. HDU 3062 Party(2-sat题模板+tarjan )

    题目: 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的.有没有可 ...

  7. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

  8. HDU 2289 Cup(二分+圆台体积)

    Problem Description The WHU ACM Team has a big cup, with which every member drinks water. Now, we kn ...

  9. HDU 3555 Bomb (数位DP-记忆化搜索模板)

    题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...

最新文章

  1. jmeter启动报错 Error occurred during initialization of VM Could not reserve enough space for object heap
  2. CSS实现的阴影效果
  3. 程序员最反感的十件事,你有同感吗?
  4. [html] 使用history路由方式时,你有自己动手配置过服务器端吗?为什么要配服务器端?怎么配?
  5. 一起学习C语言:数组(二)
  6. 卧槽!“饿了么”把“饿了吗”告了,网友:判决结果没想到~
  7. idea取消大小写自动提示
  8. VS2013 打包步骤
  9. MyBatis框架学习笔记01:初入MyBatis(一)
  10. 公民委托诉讼代理人的注意事项
  11. 操作系统Unix、Windows、Mac OS、Linux的故事
  12. 深度学习 pytorch cifar10数据集训练
  13. word 2016图表插入题注及交叉引用
  14. PL/SQL中存储过程int和out的用法
  15. ellipsize实现跑马灯总结
  16. 爬取药智网的中药材基本信息库
  17. u盘容量变小了怎么恢复
  18. android edittext属性说明
  19. D3D12渲染技术之初始化流程
  20. CocosCreator横版格斗游戏Demo(二):环游地图

热门文章

  1. 对数据进行递归排序以树状显示
  2. oracle存储while用mysql_oracle存储过程while
  3. vuex 源码分析_Vuex源码解析
  4. python可以用于机电控制么_都知道砂石骨料可以用于建筑,但是砂石的分类你都清楚么?...
  5. php动态验证码脚本,这个PHP脚本有什么问题吗? (验证码)
  6. 18、计算机图形学——BRDF与渲染方程
  7. CUD学习-查看电脑block数量与如何分配给程序
  8. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“”?
  9. sqlserver 无法远程连接到服务器,SQLServer2019无法连接远程服务器
  10. python灰度共生矩阵_四:利用python的skimage计算灰度共生矩阵