[二分+2-sat]Hdu 3622——Bomb Game
来源:互联网 发布:java线程同步 编辑:程序博客网 时间:2024/05/16 14:36
题目传送门
题目概述
在一个无限大的平面里画n个圆。
每个圆有2个待选的放置位置。
限制条件为圆不相交,求最小半径的最大值。
解题思路
显然如果R满足限制条件,那么任意r(r
接下来考虑如何验证。
不难发现这是一个2-sat问题。
假设位置
如果对这句话不理解点这里
接下来用tarjan刷环,判断
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=205,maxm=40005;int n,x[maxn],y[maxn],dfn[maxn],low[maxn],h[maxn];int tot,lnk[maxn],son[maxm],nxt[maxm],top,s[maxn],time,G;bool ins[maxn];inline int _read(){ int num=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') num=num*10+ch-48,ch=getchar(); return num*f; }int sqr(int x){return x*x;}int getl(int i,int j){return sqr(x[i]-x[j])+sqr(y[i]-y[j]);}void add(int x,int y){ nxt[++tot]=lnk[x];lnk[x]=tot;son[tot]=y;}void tarjan(int x){ dfn[x]=++time;low[x]=time; s[++top]=x;ins[x]=1; for (int j=lnk[x];j;j=nxt[j]) if (!dfn[son[j]]) {tarjan(son[j]);low[x]=min(low[x],low[son[j]]);} else if (ins[son[j]]) low[x]=min(low[x],dfn[son[j]]); if (dfn[x]==low[x]){ G++; while (s[top]!=x){h[s[top]]=G;ins[s[top]]=0;top--;} h[x]=G;ins[x]=0;top--; }}bool check(double x){ memset(lnk,0,sizeof(lnk));tot=0; for (int i=0;i<2*n;i++) for (int j=0;j<i;j++) if ((i/2!=j/2)&&getl(i,j)<(double)4*x*x) add(i,j^1),add(j,i^1); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); time=0;G=0; for (int i=0;i<2*n;i++) if (!dfn[i]) tarjan(i); for (int i=0;i<n;i++) if (h[2*i]==h[2*i^1]) return 0; return 1;}int main(){ freopen("exam.in","r",stdin); freopen("exam.out","w",stdout); while (scanf("%d",&n)==1){ for (int i=0;i<n;i++){ x[2*i]=_read();y[2*i]=_read(); x[2*i^1]=_read();y[2*i^1]=_read(); } double L=0,ans,R=4e4,mid; while (R-L>=1e-5){ mid=(L+R)/2; if (check(mid)){ans=mid;L=mid;}else R=mid; } printf("%.2lf\n",ans); } return 0;}
阅读全文
0 0
- [二分+2-sat]Hdu 3622——Bomb Game
- hdu 3622 Bomb Game#2-sat+二分
- hdu 3622 Bomb Game (二分+2-sat)
- HDU 3622 Bomb Game(2-SAT+二分)
- HDU 3622 Bomb Game (二分+2-SAT)
- HDU 3622 Bomb Game 二分 + 2-sat
- hdu 3622 Bomb Game(二分+2-sat)
- |Hdu 3622|2-SAT|二分|Bomb Game
- Hdu 3622 Bomb Game 2-SAT+二分
- HDU 3622 —— Bomb Game(2-SAT,二分答案)
- hdu 3622 Bomb Game(二分+2-sat判定)
- HDU 3622 Bomb Game( 二分查找+2-SAT )
- HDU 3622 Bomb Game(2-SAT + 二分)
- hdu 3622 Bomb Game(2-sat,二分,4级)
- HDU 3622 Bomb Game (二分+2-sat,4级 )
- hdu 3622 Bomb Game(2-SAT 二分)
- HDU 3622 Bomb Game(二分+2-sat)
- hdu 3622 Bomb Game(2-SAT,二分)
- MongoDB索引入门
- Go实战--golang中defer的使用(有事没事defer一下)
- 递归删除某类文件(命令行实现)
- “平安壹钱包”面试
- 奇异博士
- [二分+2-sat]Hdu 3622——Bomb Game
- 元编程之Javascript
- 修改软件安装默认位置
- 七种常见经典排序算法总结(C++实现)
- 英国病人
- 【BZOJ1087】【装压DP】互不侵犯King 题解
- Qt编译器--MinGW与MSVC的区别
- 斯坦福大学-大数据与数据挖掘学习资料
- URAL1099. Work Scheduling(一般图匹配带花树开花算法)