睡觉啦

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=,M=2e6+,INF=1e7;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,A,B,x,y;
struct point{int x,y;}a[N],s1,s2,f[N<<];
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=; memset(h,,sizeof(h));
for(int i=;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+;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=;i<=n;i++)
for(int j=;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=;
while(x!=u){
x=st[top--];
belong[x]=scc;
}
}
}
bool check(int mid){//printf("check %d\n",mid);
build(mid);
for(int i=;i<=n+n;i++) dfn[i]=low[i]=belong[i]=;
dfc=scc=top=;
for(int i=;i<=n;i++) if(!dfn[i]) dfs(i);
for(int i=;i<=n;i++) if(belong[i]==belong[i+n]) return false;
return true;
} int l=,r=INF;
void solve(){
int ans=-;
while(l<=r){
int mid=(l+r)>>;
if(check(mid)) ans=mid,r=mid-;
else l=mid+;
}
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=;i<=n;i++) a[i].x=read(),a[i].y=read();
for(int i=;i<=A;i++) f[i].x=read(),f[i].y=read();
for(int i=A+;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. POJ 3104 Drying(二分答案)

    题目链接:http://poj.org/problem?id=3104                                                                  ...

  2. BZOJ4078 WF2014Metal Processing Plant(二分答案+2-SAT)

    题面甚至没给范围,由数据可得n<=200.容易想到二分答案,暴力枚举某集合的价值,2-SATcheck一下即可.这样是O(n4logn)的. 2-SAT复杂度已经是下界,考虑如何优化枚举.稍微改 ...

  3. 【二分答案+2-SAT】Now or later UVALive - 3211

    题目链接:https://cn.vjudge.net/contest/209473#problem/J 题目大意: 有n架飞机,每架飞机有两个可降落时间点a,b(a<b)(即一架飞机可以选择在时 ...

  4. POJ 3122 Pie 二分答案

    题意:给你n个派,每个派都是高为一的圆柱体,把它等分成f份,每份的最大体积是多少. 思路: 明显的二分答案题-- 注意π的取值- 3.14159265359 这样才能AC,,, //By Sirius ...

  5. Poj 1743 Musical Theme(后缀数组+二分答案)

    Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 28435 Accepted: 9604 Descri ...

  6. HDU 1815 Building roads

    二分答案 + 2-SAT验证 POJ 稳过,HDU C++ 超时,G++ 550ms左右AC #include<cstdio> #include<cstring> #inclu ...

  7. Poj2749:Building roads

    题意 有 N 个牛栏,现在通过一条通道(s1,s2)要么连到s1,要么连到s2,把他们连起来,他们之间有一些约束关系,一些牛栏不能连在同一个点,一些牛栏必须连在同一个点,现在问有没有可能把他们都连好, ...

  8. poj 2749 Building roads (二分+拆点+2-sat)

    Building roads Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6229   Accepted: 2093 De ...

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

    HDU 1815, POJ 2749 Building roads pid=1815" target="_blank" style="">题目链 ...

随机推荐

  1. Ajax及异步操作

    之前我们使用的是jQuery的Ajax,这是一种极为便捷的Ajax操作方式,但是我们还需要对Ajax技术进行进一步的了解. <input type="text" id=&qu ...

  2. java序列化反序列化深入探究

    When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...

  3. iOS钉钉远程打卡助手(支持越狱和非越狱)

    前言:本文主要讲述使用hook方式实现钉钉远程打卡功能,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)   你是不是像小编一样每个 ...

  4. TP5 中实现支付宝支付 利用model层调用支付宝类库

    <?php /** * Created by PhpStorm. * User: admin * Date: 2017/8/16 * Time: 09:16 */ namespace app\a ...

  5. IE调试网页之三:使用 F12 工具控制台查看错误和状态 (Windows)

    IE调试网页之三:使用 F12 工具控制台查看错误和状态 (Windows)  等 请见博客园的  我的收藏

  6. 【编程技巧】NSTimer类的使用

    创建一个 Timer + scheduledTimerWithTimeInterval: invocation: repeats: + (NSTimer *)scheduledTimerWithTim ...

  7. J.U.C CAS

    在JDK1.5之前,也就是J.U.C加入JDK之前,Java是依靠synchronized关键字(JVM底层提供)来维护协调对共享字段的访问,保证对这些变量的独占访问权,并且以后其他线程忽的该锁时,将 ...

  8. HTML怎么设置字与字之间的间距代替空格

    空格: &nbsp CSS: letter-spacing字与字 word-spacing词与词 行距:line-height:1.5; 段落:<p style="margin ...

  9. what is yaml ?

    what is yaml  ? when I fist time meeting it  is in java projects she as a system config file to my e ...

  10. [转]js 正则表达式

    一.正则表达式中包括的元素 1.原子(普通字符:a-z A-Z 0-9 .原子表. 转义字符) 2.元字符 (有特殊功能的字符) 3.模式修正符 (系统内置部分字符 i .m.S.U…) 二.正则表达 ...