1. /*
  2. 二分+2-sat
  3. 题意:在一个二维平面上给你n个炸弹,和2*n个位置,每一行的两个位置只能有一个放炸弹
  4. 现在炸弹爆炸有一个半径,当炸弹爆炸时两个炸弹的半径化成的圆不能相交,求最大半径
  5. 二分半径,
  6. 每次如果一个炸弹可放的两个位置中的一个与其他位置有矛盾,就进行建边,最后判断是否存在这样一组解
  7. 即可。
  8. */
  9. #include<stdio.h>
  10. #include<string.h>
  11. #include<math.h>
  12. #define eps 1e-5
  13. #define N 210
  14. struct node {
  15. int u,v,next;
  16. }bian[N*N];
  17. int head[N],dfn[N],low[N],stac[N],yong,index,top,vis[N],ans,belong[N];
  18. void init() {
  19. memset(head,-1,sizeof(head));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));
  20. memset(stac,0,sizeof(stac));yong=0;index=0;top=0;;memset(vis,0,sizeof(vis));ans=0;
  21. memset(belong,0,sizeof(belong));
  22. }
  23. void addedge(int u,int v) {
  24. bian[yong].u=u;
  25. bian[yong].v=v;
  26. bian[yong].next=head[u];
  27. head[u]=yong++;
  28. }
  29. int Min(int v,int vv) {
  30. return v>vv?vv:v;
  31. }
  32. void tarjan(int u) {
  33. dfn[u]=low[u]=++index;
  34. stac[++top]=u;
  35. vis[u]=1;
  36. int i;
  37. for(i=head[u];i!=-1;i=bian[i].next) {
  38. int v=bian[i].v;
  39. if(!dfn[v]) {
  40. tarjan(v);
  41. low[u]=Min(low[u],low[v]);
  42. }
  43. else
  44. if(vis[v])
  45. low[u]=Min(low[u],dfn[v]);
  46. }
  47. if(dfn[u]==low[u]) {
  48. ans++;
  49. int t;
  50. do {
  51. t=stac[top--];
  52. belong[t]=ans;
  53. vis[t]=0;
  54. }while(t!=u);
  55. }
  56. }
  57. struct nodee{
  58. int u,v,index;
  59. }f[N*N];
  60. int n;
  61. double distance(nodee d,nodee dd) {
  62. return 1.0*(d.u-dd.u)*(d.u-dd.u)+1.0*(d.v-dd.v)*(d.v-dd.v);
  63. }
  64. int judge(double r) {
  65. int i,j;
  66. init();
  67. for(i=0;i<2*n-1;i++)
  68. for(j=i+1;j<2*n;j++) {
  69. if(i==(j^1))continue;
  70. if(distance(f[i],f[j])<(r*2)*(r*2)) {//如果有冲突就进行
  71. addedge(i,j^1);
  72. addedge(j,i^1);
  73. }
  74. }
  75. for(i=0;i<2*n;i++)
  76. if(!dfn[i])
  77. tarjan(i);
  78. for(i=0;i<n;i++)
  79. if(belong[i*2]==belong[i*2+1])break;
  80. if(i==n)return 1;
  81. return 0;
  82. }
  83. int main() {
  84. int i;
  85. double left,right,mid;
  86. while(scanf("%d",&n)!=EOF) {
  87. for(i=0;i<n;i++)
  88. scanf("%d%d%d%d",&f[i*2].u,&f[i*2].v,&f[i*2+1].u,&f[i*2+1].v);
  89. right=2*10000.0*2;left=0.0;
  90. while(right-left>eps) {
  91. mid=(left+right)/2;
  92. // printf("%.2f\n",mid);
  93. if(judge(mid))left=mid+eps;
  94. else
  95. right=mid-eps;
  96. }
  97. printf("%.2f\n",left);
  98. }
  99. return 0;}

hdu 3622 二分+2-sat的更多相关文章

  1. hdu 3622(二分+2-sat判断可行性)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3622 思路:二分是容易想到的,由于题目中有明显的矛盾关系,因此可以用2-sat来验证其可行性.关键是如 ...

  2. Bomb Game HDU - 3622(二分最小值最大化)

    题意: 就是给出n对坐标,每对只能选一个,以选出来的点为圆心,半径自定义,画圆,而这些圆不能覆盖,求半径最小的圆的最大值 解析: 看到最x值最x化,那二分变为判定性问题,然后...然后我就没想到... ...

  3. hdu 3622 二分+2-SAT判定

    思路:如题 #include<iostream> #include<algorithm> #include<cstring> #include<cstdio& ...

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

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

  5. HDU 3622 Bomb Game(2-sat)

    HDU 3622 Bomb Game 题目链接 题意:求一个最大半径,使得每一个二元组的点任选一个,能够得到全部圆两两不相交 思路:显然的二分半径,然后2-sat去判定就可以 代码: #include ...

  6. 【HDU 3622】Bomb Game

    http://acm.hdu.edu.cn/showproblem.php?pid=3622 二分答案转化成2-sat问题. 上午测试时总想二分后把它转化成最大点独立集但是不会写最大点独立集暴力又秘制 ...

  7. hdu 4024 二分

    转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html   一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...

  8. hdu 3622 Bomb Game(二分+2-SAT)

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

  9. HDU 3622 Bomb Game(二分+2SAT)

    题意:有一个游戏,有n个回合,每回合可以在指定的2个区域之一放炸弹,炸弹范围是一个圈,要求每回合的炸弹范围没有重合.得分是炸弹半径最小的值.求可以得到的最大分数. 思路:二分+2SAT. 二分炸弹范围 ...

随机推荐

  1. 转-Mac下Apache Tomcat安装配置

    ava Web如果稍微知道一点,一般对Tomcat都不会陌生,Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat ...

  2. Nginx反向代理node,实现让静态文件在同一域

    Nginx反向代理node,实现让静态文件在同一域 原文https://github.com/zhuangZhou/Blog/issues/4 不管是Vue还是React,还是传统的网站,与node服 ...

  3. 字符串(String)几个常用方法的详解

    String:(字符串) indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) searc ...

  4. git 出现 The current branch is not configured for pull No value for key branch.master.merge found in configuration

    以下是我在网上找到的不错的文章,我参考后已解决我的问题: http://my.oschina.net/robinsonlu/blog/144085 http://www.cnblogs.com/zha ...

  5. Java处理ZIP文件的解决方案——Zip4J(不解压直接通过InputStream形式读取其中的文件,解决中文乱码)

    一.JDK内置操作Zip文件其实,在JDK中已经存在操作ZIP的工具类:ZipInputStream. 基本使用: public static Map<String, String> re ...

  6. mysql 添加记录或者删除记录

    insert into tableName (prod1,pord2,... ) values (v1,v2,...) [,(v1,v2,...),(v1,v2,...)] 程度从强到弱 1.drop ...

  7. vue相关技术

    vuejs2.0:渐进式JavaScript框架,易用.灵活.高效,似乎任何规模的应用都适用. element:基于vuejs2.0的ui组件库. vue-router:一般单页面应用spa都要用到的 ...

  8. 【软件构造】(转)Java中的comparable和comparator

    为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Co ...

  9. 03C#数据类型

    C#数据类型 值类型和引用类型区别 在C#语言中,值类型变量存储的是指定数据类型的数据,值类型变量的值(或实例)存储在栈(Stack)中,赋值语句是传递变量的值.引用类型(例如类就是引用类型)的实例, ...

  10. react.js工程结构

    1.index.html :UI界面入口.挂在点: 2.manifest.json:应用说明 3.package.json:工程说明.依赖说明等 4.source : 代码源文件