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

所以可以二分最大距离,加边+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. mybatis的坑——不报错,就是不能committing,数据存不进数据库

    测试的时候会报空指针异常,在项目跑的时候会停止执行程序,不会出现异常. 经过一星期的排查与测试,最终找到错误,把mapper文件的映射属性名写错了. property属性名要与接收类的属性名保持一致. ...

  2. SQl 语句(常见) 新建,删除,修改表结构

    2006-6-15 15:58:25 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) ...

  3. PHP关于 []

    在一个表格里,提交时,名字部分加一个[],表示数组,这样,存在多个同样名字的name.前面的value不会替代后面value,如下面 <td><input name="so ...

  4. 将Mnist手写数字库转化为图片形式 和标签形式

    Mnist 数据文件有两种,一种是图片文件,一种是标签文件,那么如何把他们解析出来呢? (1)解析图片文件 可以看出在train-images.idx3-ubyte中,第一个数为32位的整数(魔数,图 ...

  5. 尺取法 poj 2566

    尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点.然后一直推进 解决问题的思路: 先移动右端点 ,右端点推进的时候一般是加 然后推进左端点,左端点一般是减 poj 2566 题 ...

  6. Dialog BLE 学习之 修改分散加载文件 (2)

    最近搞Dialog的BLE SDK,发现空间不够了,询问原厂,得知可以通过调整分散加载文件而增加空间,一方面是有42KB+8KB的硬件基础,另一方面是原有的程序限制为38KB+8KB.故顺便学习了下把 ...

  7. 7.Mongodb安全性流程

    1.安全性流程 2.超级管理员 为了更安全的访问mongodb,需要访问者提供用户名和密码,于是需要在mongodb中创建用户 采用了角色-用户-数据库的安全管理方式 常用系统角色如下: root:只 ...

  8. win32 signal

    Remarks   The signal function enables a process to choose one of several ways to handle an interrupt ...

  9. Windows Server 2012 R2有哪些存储监控工具

    [TechTarget中国原创] 大多数Windows管理员都知道,没有一种单一的方法可以用来监控存储或磁盘错误.虽然市场上有无数的管理工具可供你选择,但由于政策和规程的原因,企业之间的选择不尽相同. ...

  10. centso下如何解压RAR文件

    tar -xvf rarlinux-3.9.3.tar.gz cd rar   make 看见下面这些信息就是安装成功了 mkdir -p /usr/local/bin mkdir -p /usr/l ...