好久没有2-sat了,此题当复习之用,二分求最大值+2-sat判断可行,此题主要跪于题意:The results should be rounded to three decimal

places. You should promise that there is still no overlap for any two balloons after rounded.

rounded是四舍五入的意思,按要求,3位之后要全部舍去,知道:printf(),自动四舍五入。所有-0.0005

之后四舍五入即为要求。

  1. #include<iostream>
  2. #include<queue>
  3. #include<stack>
  4. #include<cstdio>
  5. #include<vector>
  6. using namespace std;
  7. int n;
  8. struct points
  9. {
  10. int x,y,z;
  11. };
  12. points point[402];
  13. inline int getdis(points a,points b) //三维
  14. {
  15. return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z);
  16. }
  17. int vis[402];int dfn[402];int low[402];int scc[402];int numscc=0;
  18. int times=0; stack<int>sta;int ins[402];
  19. vector<vector<int> >v(402);
  20. void clear()
  21. {
  22. for(int i=0;i<2*n;i++)
  23. {
  24. ins[i]=vis[i]=dfn[i]=low[i]=scc[i]=0;
  25. v[i].clear();
  26. }
  27. numscc=times=0;
  28. }
  29. void tarjian(int u)
  30. {
  31. dfn[u]=low[u]=++times;
  32. sta.push(u);
  33. ins[u]=1;
  34. int len=v[u].size();
  35. for(int i=0;i<len;i++)
  36. {
  37. int uu=v[u][i];
  38. if(!vis[uu])
  39. {
  40. vis[uu]=1;
  41. tarjian(uu);
  42. if(low[uu]<low[u])low[u]=low[uu];
  43. }
  44. else if(ins[uu]&&dfn[uu]<low[u])
  45. low[u]=dfn[uu];
  46. }
  47. if(low[u]==dfn[u])
  48. {
  49. int cur;
  50. numscc++;
  51. do
  52. {
  53. cur=sta.top();
  54. sta.pop();
  55. ins[cur]=0;
  56. scc[cur]=numscc;
  57. }while(cur!=u);
  58. }
  59. }
  60. bool check(double r)
  61. {
  62. clear();
  63. for(int i=0;i<2*n-2;i++)
  64. for(int j=(i%2==0?i+2:i+1);j<2*n;j++)
  65. {
  66. double dis=0.00+getdis(point[i],point[j]);
  67. if(dis<4*r*r)
  68. {
  69. v[i].push_back(j^1);
  70. v[j].push_back(i^1);
  71. }
  72. }
  73. for(int i=0;i<2*n;i++)
  74. {
  75. if(!vis[i])
  76. {
  77. vis[i]=1;
  78. tarjian(i);
  79. }
  80. }
  81. for(int i=0;i<2*n;i+=2)
  82. {
  83. if(scc[i]==scc[i+1])
  84. return 0;
  85. }
  86. return 1;
  87. }
  88. int main()
  89. {
  90. while(~scanf("%d",&n))
  91. {
  92.  
  93. for(int i=0;i<2*n;i++)
  94. scanf("%d%d%d",&point[i].x,&point[i].y,&point[i].z);
  95. double l=0,r=100000,mid;
  96. while(r-l>0.000001) //二分。
  97. {
  98. mid=(r+l)/2;
  99. if(check(mid))
  100. l=mid;
  101. else
  102. r=mid;
  103. }
  104. double ll=l-0.0005;
  105. printf("%.3lf\n",ll);
  106. }
  107. return 0;
  108. }

ZOJ 3717 二分+2-sat判定。的更多相关文章

  1. ZOJ 3717

    这题是二分+2SAT. 总结一下SAT题的特征.首先,可能会存在二选一的情况,然后会给出一些矛盾.据这些矛盾加边,再用SAT判定. 这一道题好像不能直接用printf("%0.3lf&quo ...

  2. Building Fire Stations ZOJ - 3820 (二分,树的直径)

    大意: 给定树, 求两个点, 使得所有其他的点到两点的最短距离的最大值尽量小. 二分答案转为判定选两个点, 向外遍历$x$的距离是否能遍历完整棵树. 取直径两段距离$x$的位置bfs即可. #incl ...

  3. BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图

    这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...

  4. bzoj 1189 二分+最大流判定

    首先我们可以二分一个答案时间T,这样就将最优性问题 转化为了判定性问题.下面我们考虑对于已知的T的判定 对于矩阵中所有的空点bfs一次,得出来每个点到门的距离, 然后连接空点和每个能在t时间内到达的门 ...

  5. zoj 3460 二分+二分图匹配

    不错的思想 /* 大致题意: 用n个导弹发射塔攻击m个目标.每个发射架在某个时刻只能为 一颗导弹服务,发射一颗导弹需要准备t1的时间,一颗导弹从发 射到击中目标的时间与目标到发射架的距离有关.每颗导弹 ...

  6. bzoj 1305 二分+最大流判定|贪心

    首先我们二分一个答案mid,在判定是否能举办mid次,那么对于每个次我们可以用最大流根据是否满流(流量为n*mid)来判定,对于每个点我们拆成两个点,分别表示这个人要和他喜欢和不喜欢的人一起跳舞,那么 ...

  7. 跳蚤[BZOJ4310](后缀数组+二分答案传判定)

    不知道后缀数组的请退回去! 题面: 题目描述 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究.首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S ...

  8. 排序HEOI2016/TJOI2016 二分+线段树判定

    LINK:排序 此题甚好我一点思路都没有要是我当时省选此题除了模拟我恐怕想不到还可以二分 还可以线段树... 有点ex 不太好写 考虑 暴力显然每次给出询问我们都是可以直接sort的 无视地形无视一切 ...

  9. 二分+最短路判定 BZOJ 2709: [Violet 1]迷宫花园

    BZOJ 2709: [Violet 1]迷宫花园 Sample Input 5 ######### # # # # # # # #S# # ##### # # ## # # # ### ### ## ...

随机推荐

  1. 通过例子理解 k8s 架构【转】

    为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replic ...

  2. CPP-网络/通信:POST

    BOOL PostSubmit(CString strUrl,const CString&strPara, CString&strContent){ BOOL bRet=FALSE; ...

  3. Python 入门基础

    第一章 计算机基础 1.1 硬件 CPU:处理和运算 内存:临时存储数据 硬盘:永久存储系统 操作系统:是一个软件(特殊), 调度每个硬件之间的数据传输 1.2 操作系统 Windows:xp/7/8 ...

  4. CS193p Lecture 7 - Views, Gestures

    Views 如何绘制自定义图像 Gestures 如何处理用户手势操作 Views 1.它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件: 2.它是分 ...

  5. 【树形dp】7.14城市

    很典型的按照边考虑贡献的题. 题目描述 小A居住的城市可以认为由n个街区组成.街区从1到n依次标号街区与街区之间由街道相连,每个街区都可以通过若干条街道到达任意一个街区,共有n-1条街道.其中标号为i ...

  6. verilog disable 用法 (易错!)

    disable语句可以退出任何循环,能够终止任何begin..end块的执行,用于仿真验证中. 例如 begin:one ;i<;i=i+) begin:two ) disable one; / ...

  7. 项目之socket

    客户端socket 客户端套接字完成的任务很统一,发送请求,接收请求结果 可以封装成一个方法 使用的tcp协议存在粘包问题,故需要自定义报头 import json import struct #项目 ...

  8. Day09文件操作

    1.什么是文件 文件:操作系统为应用程序或者用户提供的一种操作硬盘的虚拟单位 强调:①文件是操作系统提供的虚拟单位②应用程序或者用户对文件的读写操作其实都是向操作系统发送指令 2.为什么要用文件 文件 ...

  9. H.264编码profile & level控制

    背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high:  1.Baseli ...

  10. Hive元数据启动失败

    Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocke ...