【HDU3622】Bomb Game-二分答案+2-SAT
来源:互联网 发布:3d人体模型软件 编辑:程序博客网 时间:2024/06/05 07:48
测试地址:Bomb Game
题目大意:有
做法:本题需要用到二分答案+2-SAT。
首先,看到求最小的啥啥啥的最大值就想到二分答案。因为对于一个可行解,把任何圆的半径减小,也是一个可行解,因此所有可行解都等价于所有圆半径相同的一个解,所以如果所有圆半径为
注意到题目中的“两个中只能选一个”的条件,很显然就是2-SAT的模型,那么考虑限制条件:任两个圆不相交。我们知道两个圆相交的条件是
以下是本人代码:
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#define eps 1e-8using namespace std;int n;double x[210],y[210],dis[210][210];int belong[210],stack[210],first[210],top,tott,tot,tim;int dfn[210],low[210];bool vis[210];struct edge {int v,next;} e[100010];void insert(int a,int b){ e[++tot].v=b; e[tot].next=first[a]; first[a]=tot;}int nt(int x){ if (x%2==0) return x+1; else return x-1;}void dfs(int v){ vis[v]=1; dfn[v]=low[v]=++tim; stack[++top]=v; int now=top; for(int i=first[v];i;i=e[i].next) { if (!vis[e[i].v]) { dfs(e[i].v); low[v]=min(low[v],low[e[i].v]); } else if (!belong[e[i].v]) low[v]=min(low[v],dfn[e[i].v]); } if (low[v]==dfn[v]) { tott++; for(int i=now;i<=top;i++) belong[stack[i]]=tott; top=now-1; }}void tarjan(){ memset(vis,0,sizeof(vis)); memset(belong,0,sizeof(belong)); tim=0; for(int i=0;i<2*n;i++) if (!vis[i]) dfs(i); tott++; for(int i=1;i<=top;i++) belong[stack[i]]=tott;}bool check(double r){ memset(first,0,sizeof(first)); top=tot=tott=0; for(int i=0;i<2*n;i++) for(int j=i+1;j<2*n;j++) if (dis[i][j]-r*2<-eps) { insert(i,nt(j)); insert(j,nt(i)); } tarjan(); for(int i=0;i<n;i++) if (belong[2*i]==belong[2*i+1]) return 0; return 1;}int main(){ while(scanf("%d",&n)!=EOF) { for(int i=0;i<2*n;i++) scanf("%lf%lf",&x[i],&y[i]); for(int i=0;i<2*n;i++) for(int j=i+1;j<2*n;j++) dis[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); double l=0,r=40000; while(r-l>0.0001) { double mid=(l+r)/2.0; if (check(mid)) l=mid; else r=mid; } printf("%.2lf\n",l); } return 0;}
阅读全文
0 0
- 【HDU3622】Bomb Game-二分答案+2-SAT
- hdu3622 Bomb Game(二分+2-SAT)
- HDU3622-Bomb Game(2-SAT+二分)
- hdu3622 Bomb Game--2-sat & 二分
- [二分 + 2-SAT] HDU3622: Bomb Game
- [HDU3622][2-sat]Bomb Game
- hdu3622 Bomb Game(2分答案+2sat判定)
- [HDU3622]Bomb Game(2-SAT)
- HDU3622.Bomb Game——2-sat二分最大值+可行性判定
- [HDOJ 3622][Vjudge 11707] Bomb Game [2-SAT+二分答案]
- hdu 3622 Bomb Game(2-sat 二分答案)
- HDU 3622 Bomb Game 2-SAT 二分答案
- HDU3622 二分+2-SAT
- HDU3622(二分+2-SAT)
- hdu3622 二分+2sat
- hdu3622 2-SAT+二分
- hdu 3622 Bomb Game(二分答案+2-sat判断答案可行性)
- hdu 3622 Bomb Game#2-sat+二分
- hdu 6063 RXD and math (迷之 快速幂)
- 美元汇率问题 酒馆浪人的博客
- 堆排序菜鸟入门
- Spring关于增强(前置,后置,异常,环绕。。。)
- Java中的UUID
- 【HDU3622】Bomb Game-二分答案+2-SAT
- c++ tips
- Unity 实现按钮点击 某物体缓慢放大效果 比如打开商店
- drbd安装和数据同步
- oracle遇见问题记录
- Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)
- java中用什么方式可以是运行的线程终止????
- CF1 A+B+C
- sqlldr--SQL*Loader的使用