hdu 3622 Bomb Game【二分+2-SAT+tarjan】
用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】相关推荐
- HDU 3622 Bomb Game / 2-SAT
刚刚学 看到很多网上和书上有直接逐点判断的dfs暴力算法 加上今天事情特别多 看了半天 也可以用tarjan判断 这个有空在学 题意不用说了吧 就是求一个半径 n个炸弹吧 每个可以选择2个点之中的一个 ...
- hdu 3622 二分+2-sat
/* 二分+2-sat 题意:在一个二维平面上给你n个炸弹,和2*n个位置,每一行的两个位置仅仅能有一个放炸弹 如今炸弹爆炸有一个半径.当炸弹爆炸时两个炸弹的半径化成的圆不能相交,求最大半径 二分半径 ...
- 【HDU 4547 CD操作】LCA问题 Tarjan算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4547 题意:模拟DOS下的cd命令,给出n个节点的目录树以及m次查询,每个查询包含一个当前目录cur和 ...
- HDU 3646 DP + 二分
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...
- hdu 5199 map或二分或哈希
题目描述:给出n棵树的高度,每棵树上都站着一只鸟,枪手Jack站在最左边那棵树的左边对鸟进行射击,当Jack在高度为H的地方向右发射一颗子弹的时候,高度为H的树上的鸟儿就会掉落(注:其他树上的鸟儿不会 ...
- HDU 3062 Party(2-sat题模板+tarjan )
题目: 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的.有没有可 ...
- HDU 3555 Bomb(数位DP模板啊两种形式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...
- HDU 2289 Cup(二分+圆台体积)
Problem Description The WHU ACM Team has a big cup, with which every member drinks water. Now, we kn ...
- HDU 3555 Bomb (数位DP-记忆化搜索模板)
题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...
最新文章
- jmeter启动报错 Error occurred during initialization of VM Could not reserve enough space for object heap
- CSS实现的阴影效果
- 程序员最反感的十件事,你有同感吗?
- [html] 使用history路由方式时,你有自己动手配置过服务器端吗?为什么要配服务器端?怎么配?
- 一起学习C语言:数组(二)
- 卧槽!“饿了么”把“饿了吗”告了,网友:判决结果没想到~
- idea取消大小写自动提示
- VS2013 打包步骤
- MyBatis框架学习笔记01:初入MyBatis(一)
- 公民委托诉讼代理人的注意事项
- 操作系统Unix、Windows、Mac OS、Linux的故事
- 深度学习 pytorch cifar10数据集训练
- word 2016图表插入题注及交叉引用
- PL/SQL中存储过程int和out的用法
- ellipsize实现跑马灯总结
- 爬取药智网的中药材基本信息库
- u盘容量变小了怎么恢复
- android edittext属性说明
- D3D12渲染技术之初始化流程
- CocosCreator横版格斗游戏Demo(二):环游地图
热门文章
- 对数据进行递归排序以树状显示
- oracle存储while用mysql_oracle存储过程while
- vuex 源码分析_Vuex源码解析
- python可以用于机电控制么_都知道砂石骨料可以用于建筑,但是砂石的分类你都清楚么?...
- php动态验证码脚本,这个PHP脚本有什么问题吗? (验证码)
- 18、计算机图形学——BRDF与渲染方程
- CUD学习-查看电脑block数量与如何分配给程序
- 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“”?
- sqlserver 无法远程连接到服务器,SQLServer2019无法连接远程服务器
- python灰度共生矩阵_四:利用python的skimage计算灰度共生矩阵