睡觉啦

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1005,M=2e6+5,INF=1e7;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int n,A,B,x,y;
struct point{int x,y;}a[N],s1,s2,f[N<<1];
inline int dis(point &a,point &b){return abs(a.x-b.x)+abs(a.y-b.y);}
struct edge{int v,ne;
}e[M];
int cnt,h[N];
inline void ins(int u,int v){//if(u==1 || v==1) printf("ins %d %d\n",u,v);cnt++;e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
}
void build(int mid){cnt=0; memset(h,0,sizeof(h));for(int i=1;i<=A;i++) ins(f[i].x,f[i].y+n),ins(f[i].x+n,f[i].y),ins(f[i].y,f[i].x+n),ins(f[i].y+n,f[i].x);for(int i=A+1;i<=A+B;i++)ins(f[i].x,f[i].y),ins(f[i].x+n,f[i].y+n),ins(f[i].y,f[i].x),ins(f[i].y+n,f[i].x+n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) if(i!=j){if(dis(a[i],s1)+dis(a[j],s1)>mid) ins(i,j+n),ins(j,i+n);if(dis(a[i],s2)+dis(a[j],s2)>mid) ins(i+n,j),ins(j+n,i);if(dis(a[i],s1)+dis(s1,s2)+dis(s2,a[j])>mid) ins(i,j),ins(j+n,i+n);if(dis(a[i],s2)+dis(s1,s2)+dis(s1,a[j])>mid) ins(i+n,j+n),ins(j,i);}
}
int dfn[N],dfc,low[N],belong[N],scc;
int st[N],top;
void dfs(int u){//printf("Dfs %d\n",u);dfn[u]=low[u]=++dfc;st[++top]=u;for(int i=h[u];i;i=e[i].ne){int v=e[i].v;if(!dfn[v]) dfs(v),low[u]=min(low[u],low[v]);else if(!belong[v]) low[u]=min(low[u],dfn[v]);}if(dfn[u]==low[u]){scc++; int x=0;while(x!=u){x=st[top--];belong[x]=scc;}}
}
bool check(int mid){//printf("check %d\n",mid);
    build(mid);for(int i=1;i<=n+n;i++) dfn[i]=low[i]=belong[i]=0;dfc=scc=top=0;for(int i=1;i<=n;i++) if(!dfn[i]) dfs(i);for(int i=1;i<=n;i++) if(belong[i]==belong[i+n]) return false;return true;
}int l=0,r=INF;
void solve(){int ans=-1;while(l<=r){int mid=(l+r)>>1;if(check(mid)) ans=mid,r=mid-1;else l=mid+1;}printf("%d\n",ans);
}
int main(){freopen("in","r",stdin);n=read();A=read();B=read();s1.x=read();s1.y=read();s2.x=read();s2.y=read();for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();for(int i=1;i<=A;i++) f[i].x=read(),f[i].y=read();for(int i=A+1;i<=A+B;i++) f[i].x=read(),f[i].y=read(),l=max( l,dis(a[ f[i].x ],a[ f[i].y ]) );solve();
}

POJ Building roads [二分答案 2SAT]相关推荐

  1. HDU 1815, POJ 2749 Building roads(2-sat)

    HDU 1815, POJ 2749 Building roads 题目链接HDU 题目链接POJ 题意: 有n个牛棚, 还有两个中转站S1和S2, S1和S2用一条路连接起来. 为了使得随意牛棚两个 ...

  2. UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)

    题目要求为 最大化最小值,很明显就是二分答案. 题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT. 我们二分答案,二分着陆时间间隔的最小值 x. 枚举每两个飞机 p , ...

  3. [poj] 2749 building roads

    原题 2-SAT+二分答案! 最小的最大值,这肯定是二分答案.而我们要2-SATcheck是否在该情况下有可行解. 对于目前的答案limit,首先把爱和恨连边,然后我们n^2枚举每两个点通过判断距离来 ...

  4. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)

    $ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...

  5. poj 3258 River Hopscotch 二分答案

    题目地址: http://poj.org/problem?id=3258 题目思路: 首先,如果只减少一部,那么一定要干掉最短的那段距离(一旦不消灭,最小的还是它,并没有达到使最小值取最大的理想情况) ...

  6. POJ 1064 Cable master (二分答案)

    题目链接:http://poj.org/problem?id=1064 有n条绳子,长度分别是Li.问你要是从中切出m条长度相同的绳子,问你这m条绳子每条最长是多少. 二分答案,尤其注意精度问题.我觉 ...

  7. poj 1064 java_poj 1064(二分答案)

    题意: 有N条绳子,长度分别为 length[1,2,3,........,N]. 如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长有多长? 结果保留两位小数. 题解: 二分可能的长度. AC ...

  8. POJ 3579 二分答案

    POJ 3579 二分答案 文章目录 POJ 3579 二分答案 题目 思路 代码 题目 思路 排序,二分一下答案,然后对于每一个元素看一看加上这个答案tmp之后,在数列里面排在哪里,比a[i]+tm ...

  9. POJ2018-Best Cow Fences【实数二分答案】

    正题 题目链接:http://poj.org/problem?id=2018 大意 有n个数,一段长度不小于L的子段,使他们的平均值最大. 解题思路 二分答案,然后一遍暴力用最大子段和的方法求出是否可 ...

  10. [BZOJ1626][Usaco2007 Dec]Building Roads 修建道路

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1730  Solved ...

最新文章

  1. 一篇文章搞懂fof好友推荐案例
  2. ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]
  3. How to install MinGW-w64 and MSYS2?
  4. java dom获取属性值_java – 获取dom节点的属性
  5. 时序分析:串匹配-KMP算法
  6. unity3d 可视化编程_R编程系列:R中的3D可视化
  7. 3 Sum Closest
  8. 关于微信和支付宝小程序审核记录分享
  9. c语言标准函数库怎么建立教程,C语言入门教程-创建一个函数库
  10. 虹软人脸识别在 linux中so文件加载不到的问题
  11. Range.EntireRow Property
  12. 【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
  13. windows 7计算机用户名和密码忘了,教你电脑密码忘了怎么办
  14. flyaway mysql_MySQL open table
  15. 如何用vba做答题、抽点类ppt
  16. Python小游戏-Las Vegas Black Jack- CASINO (21点)
  17. 西安达刚公路机电科技有限公司董事长李太杰简介
  18. 让所有美术生头疼的素描静物,快看你画过没?
  19. matlab:print命令保存eps文件与figure文件显示不同之解决方法
  20. java支票金额转换

热门文章

  1. tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
  2. 计算机网络—3网络层(路由选择协议、路由表的生成)
  3. java zip_Java压缩技术(二) ZIP压缩——Java原生实现
  4. linux支持ext2格式吗,linux正统标准文件系统ext2详解
  5. Unomi 成为 Apache 软件基金会顶级项目
  6. SAPI V1.4发布,轻巧的API输出测试组件
  7. 洛谷P3709 大爷的字符串题(莫队)
  8. 面对网络灾难风暴Fortinet安立方打造完美方舟
  9. 初识验收测试管理工具FitNesse
  10. Cisco路由器DHCP服务器基本配置