把爱恨和最大距离视为限制条件,可以知道,最大距离和限制条件多少具有单调性

所以可以二分最大距离,加边+check

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stack>
#define N 5010
#define INF 4000000
using namespace std;
int dis1[N],a,b,n,dis2[N],sx1,sy1,sx2,sy2,head[N],dfn[N],low[N],ecnt,x[N],y[N],tmp,ok,belong[N],hate[N][],love[N][],indx,inst[N],cnt;
stack <int> st;
int read()
{
int ret=,neg=;
char j=getchar();
for (;j>'' || j<'';j=getchar())
if (j=='-') neg=-;
for (;j>='' && j<='';j=getchar())
ret=ret*+j-'';
return ret*neg;
}
struct edge
{
int nxt,v;
}e[N*N];
int ABS(int x)
{
return x>?x:-x;
}
void add(int u,int v)
{
e[++ecnt].v=v;
e[ecnt].nxt=head[u];
head[u]=ecnt;
}
void init()
{
memset(head,,sizeof(head));
memset(dfn,,sizeof(dfn));
ecnt=;
indx=;
cnt=;
}
void buildG(int lim)
{
for (int i=;i<=a;i++)
{
int u=hate[i][],v=hate[i][];
add(u,v+n),add(v,u+n),add(u+n,v),add(v+n,u);
}
for (int i=;i<=b;i++)
{
int u=love[i][],v=love[i][];
add(u,v),add(v+n,u+n),add(u+n,v+n),add(v,u);
}
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++)
{
if (dis1[i]+dis2[j]+tmp>lim)
add(i,j),add(j+n,i+n);
if (dis2[i]+dis1[j]+tmp>lim)
add(i+n,j+n),add(j,i);
if (dis1[i]+dis1[j]>lim)
add(i,j+n),add(j,i+n);
if (dis2[i]+dis2[j]>lim)
add(i+n,j),add(j+n,i);
}
}
void tar(int u)
{
dfn[u]=low[u]=++indx;
inst[u]=;
st.push(u);
for (int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if (!dfn[v])
{
tar(v);
low[u]=min(low[v],low[u]);
}
else if (inst[v])
low[u]=min(dfn[v],low[u]);
}
if (low[u]==dfn[u])
{
int t;
++cnt;
while ()
{
t=st.top();
inst[t]=;
st.pop();
belong[t]=cnt;
if (t==u) break;
}
}
}
int check(int lim)
{
init();
buildG(lim);
for (int i=;i<=*n;i++)
if (!dfn[i]) tar(i);
for (int i=;i<=n;i++)
if (belong[i]==belong[i+n]) return ;
return ;
}
int main()
{
n=read(),a=read(),b=read();
sx1=read(),sy1=read(),sx2=read(),sy2=read();
tmp=ABS(sx1-sx2)+ABS(sy1-sy2);
for (int i=;i<=n;i++)
{
x[i]=read(),y[i]=read();
dis1[i]=ABS(x[i]-sx1)+ABS(y[i]-sy1);
dis2[i]=ABS(x[i]-sx2)+ABS(y[i]-sy2);
}
for (int i=;i<=a;i++)
hate[i][]=read(),hate[i][]=read();
for (int i=;i<=b;i++)
love[i][]=read(),love[i][]=read();
int l=,r=INF,mid;
while (l<r)
{
mid=(l+r)>>;
if (check(mid)==) r=mid;
else l=mid+;
}
printf("%d\n",l==INF?-:l);
return ;
}

POJ 2749 Building roads 2-sat+二分答案的更多相关文章

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

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

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

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

  3. [poj] 2749 building roads

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

  4. poj 3625 Building Roads

    题目连接 http://poj.org/problem?id=3625 Building Roads Description Farmer John had just acquired several ...

  5. POJ 1226 Substrings(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=1226 [题目大意] 求在每个给出字符串中出现的最长子串的长度,字符串在出现的时候可以是倒置的. [题解] 我们将每个字符串倒置,用 ...

  6. poj 3294 Life Forms - 后缀数组 - 二分答案

    题目传送门 传送门I 传送门II 题目大意 给定$n$个串,询问所有出现在严格大于$\frac{n}{2}$个串的最长串.不存在输出'?' 用奇怪的字符把它们连接起来.然后求sa,hei,二分答案,按 ...

  7. poj 3415 Common Substrings - 后缀数组 - 二分答案 - 单调栈

    题目传送门 传送点I 传送点II 题目大意 给定串$A, B$,求$A$和$B$长度大于等于$k$的公共子串的数量. 根据常用套路,用一个奇怪的字符把$A$,$B$连接起来,然后二分答案,然后按mid ...

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

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

  9. Poj 3261 Milk Patterns(后缀数组+二分答案)

    Milk Patterns Case Time Limit: 2000MS Description Farmer John has noticed that the quality of milk g ...

随机推荐

  1. poj_2689_Prime Distance

    The branch of mathematics called number theory is about properties of numbers. One of the areas that ...

  2. PHP自动生成分页链接

    page.class.php <?php class Page { // 分页栏每页显示的页数 public $rollPage = 5; // 页数跳转时要带的参数 public $param ...

  3. 理解volatile与synchronized

    用 volatile 修饰的变量可以保证线程的"可见性",也就是,任何线程修改了这个 volatile 修饰的值都会通知其他线程来主缓存中重新读取值. 下面通过例子加以说明: pu ...

  4. [Bzoj2282]消防(二分答案+树的直径)

    Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家 ...

  5. android systemtrace 报错

    折腾了很久,妈的,终于可以跑出来systemtrace了.如果你跟我一样,老是生成trace失败,那么,按我说的啦: 坑就在,你必须选一个路径存放trace.html,你不选一个,他就生成不了. 打开 ...

  6. Oracle exp,imp,expdp,impdp数据导入导出

    一.导出模式(三种模式)及命令格式 1. 全库模式 exp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\文件名.log 2. 用户模式(一般情况下采用此模式) ...

  7. 《1024伐木累》-BUG的通用解决办法

    本周月侠出场,一番侠骨柔情,或许你会为丽姐担忧,或许你也很想知道,发现了一个不该发现的秘密,月侠的未来究竟会怎样,但是一切都只是一个开头,伴随故事成长,伴随故事了解时事,尤其是IT圈子里的事儿,或许真 ...

  8. ICG-智能代码生成器.(权限控制.融入平台).(表单引擎).(最低兼容IE8)

    请下拉滚动条... 代码生成器.附带客户端代码 个人平台:www.10086bank.com 界面: 1--首先是server制作界面(BS结构).直接上图:   2--点击提交生成一下文件: 各个代 ...

  9. 玩转Openstack之Nova中的协同并发(二)

    玩转Openstack之Nova中的协同并发(二) 昨天介绍了Python中的并发处理,主要介绍了Eventlet,今天就接着谈谈Openstack中Nova对其的应用. eventlet 在nova ...

  10. (原)App源码

    序) 人生就像卫生纸,有事没事少扯 前言) 最近偶尔和一位极客大牛聊了一次,这个极客在汇编的造诣算是相当高,不过野路子出来看不起各种规矩,因此是适合做个自己蒙头研究技术的极客男,不适合大型团队,不适合 ...