思路:如题

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<cmath>
  6. #define Maxm 100010
  7. #define eps 1e-4
  8. using namespace std;
  9. int vi[],head[],e,n,m,id[],lab,num,dfn[],low[],Stack[],top;
  10. double Max;
  11. struct Point{
  12. double x,y;
  13. }p[];
  14. struct Edge{
  15. int u,v,next;
  16. }edge[Maxm];
  17. void init()
  18. {
  19. memset(vi,,sizeof(vi));
  20. memset(head,-,sizeof(head));
  21. memset(dfn,,sizeof(dfn));
  22. memset(low,,sizeof(low));
  23. lab=num=top=;
  24. e=;
  25. }
  26. void add(int u,int v)
  27. {
  28. edge[e].u=u,edge[e].v=v,edge[e].next=head[u],head[u]=e++;
  29. }
  30. double Dis(Point a,Point b)
  31. {
  32. return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
  33. }
  34. void Tarjan(int u)
  35. {
  36. int i,j,v;
  37. dfn[u]=low[u]=++lab;
  38. Stack[top++]=u;
  39. vi[u]=;
  40. for(i=head[u];i!=-;i=edge[i].next)
  41. {
  42. v=edge[i].v;
  43. if(!dfn[v])
  44. {
  45. Tarjan(v);
  46. low[u]=min(low[u],low[v]);
  47. }
  48. if(vi[v])
  49. low[u]=min(low[u],dfn[v]);
  50. }
  51. if(low[u]==dfn[u])
  52. {
  53. ++num;
  54. do{
  55. i=Stack[--top];
  56. vi[i]=;
  57. id[i]=num;
  58. }while(i!=u);
  59. }
  60. }
  61. int solve()
  62. {
  63. int i,j;
  64. for(i=;i<=*n;i++)
  65. if(!dfn[i])
  66. Tarjan(i);
  67. for(i=;i<=n;i++)
  68. if(id[i]==id[i+n])
  69. return ;
  70. return ;
  71. }
  72. void buildGraphic(double mid)
  73. {
  74. init();
  75. int i,j;
  76. for(i=;i<=n;i++)
  77. {
  78. for(j=i+;j<=n;j++)
  79. {
  80. if(Dis(p[i],p[j])<mid)
  81. add(i,j+n),add(j,i+n);
  82. if(Dis(p[i+n],p[j+n])<mid)
  83. add(i+n,j),add(j+n,i);
  84. }
  85. for(j=+n;j<=*n;j++)
  86. {
  87. if(j==i+n) continue;
  88. if(Dis(p[i],p[j])<mid)
  89. add(i,j-n),add(j,i+n);
  90. }
  91. }
  92. }
  93. int main()
  94. {
  95. int i,j;
  96. while(scanf("%d",&n)!=EOF)
  97. {
  98. init();
  99. for(i=;i<=n;i++)
  100. scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&p[i+n].x,&p[i+n].y);
  101. double l,r,mid;
  102. l=,r=;
  103. while(l+eps<r)
  104. {
  105. mid=(l+r)/;
  106. buildGraphic(mid*);
  107. if(solve())
  108. l=mid;
  109. else
  110. r=mid;
  111. }
  112. printf("%.2lf\n",l);
  113. }
  114. return ;
  115. }

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

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

  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 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

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

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

随机推荐

  1. Java设计模式系列之工厂模式

    工厂模式将大量有共同接口的类实例化,工厂模式可以实现动态决定实例化哪一个类的对象,工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):添加某一种类型的 ...

  2. jQuery基础学习6——基本选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Umbraco官方技术文档 中文翻译

    Umbraco 官方技术文档中文翻译 http://blog.csdn.net/u014183619/article/details/51919973 http://www.cnblogs.com/m ...

  4. Light oj 1138 - Trailing Zeroes (III) (二分)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1138 题目就是给你一个数表示N!结果后面的0的个数,然后让你求出最小的N. 我们可以知 ...

  5. poj1459

    初涉网络流.改日再写一些概念性的介绍. ek算法可作为模板使用. #include <iostream> #include <queue> using namespace st ...

  6. C语言简单实现sizeof功能代码

    sizeof不是函数,而是运算符,C/C++语言编译器在预编译阶段的时候就已经处理完了sizeof的问题,也就是说sizeof类似于宏定义. 下面给出一个sizeof的一个宏定义实现版本 #defin ...

  7. Cygwin解决Windows远程登录linux服务器

    下载地址http://www.cygwin.com/install.html 选择mirror.htnshost.com网站下载的比较快. 安装Cygwin(/X)需要选择的包: openssh(必选 ...

  8. 解决Linux下sqlplus中文乱码问题

    错误现象:在windows下用其他工具访问oracle,确认中文正常显示.在Linux下使用sqlplus查询数据表中文内容出现乱码. 分析及解决:因为windows下正常,所以问题应出现在Linux ...

  9. [cocos2d-x3.0]Xcode 升级到5.1后,cocos2d-x3.0 编译64bit出错解决方案

    转自:http://blog.csdn.net/blucenong/article/details/21198089 把Architectures --->Other 改成 $(ARCHS_ST ...

  10. cocos2d-x CCListView

    转自:http://blog.csdn.net/onerain88/article/details/7641126 cocos2d-x 2.0 版更新了,把opengl 1.1 替换为opengl 2 ...