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

所以可以二分最大距离,加边+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. mongodb多个查询语句

    db.getCollection('costitems').find({"created":{"$gte":ISODate("2019-01-02T0 ...

  2. Docker自学纪实(五) 使用Dockerfile构建php网站环境镜像

    一般呢,docker构建镜像容器的方式有两种:一种是pull dockerhub仓库里面的镜像,一种是使用Dockerfile自定义构建镜像. 很多时候,公司要求的镜像并不一定符合dockerhub仓 ...

  3. get请求中文乱码问题

    Get中文乱码解决 Get请求类型: <form action="${pageContext.request.contextPath}/addArtical.action"  ...

  4. pywinauto 的使用

    要用python实现Windows窗口程序的自动化操作,可以用ctypes调用windowsapi来实现,还可以用pywin32+pywinauto来实现,后者是别人造的轮子. pywinauto首页 ...

  5. python爬虫:爬取猫眼TOP100榜的100部高分经典电影

    1.问题描述: 爬取猫眼TOP100榜的100部高分经典电影,并将数据存储到CSV文件中 2.思路分析: (1)目标网址:http://maoyan.com/board/4 (2)代码结构: (3) ...

  6. C++基础 匿名对象

    以下几种情况又会匿名对象 (1)对象构造 与 匿名对象 Test t1 = Test(); 这时,Test()会构造匿名对象,并且是调用无参构造函数,然后 t1 将匿名对象扶正. (2)对象赋值 与 ...

  7. [BZOJ2527] [Poi2011]Meteors(整体二分)

    对于单个国家,可以对答案进行二分,每次找出此时的陨石数量,如果大于需要的那么答案就在[l,mid],否则就在[mid+1,r]里面 而对于很多国家,也可以进行二分,solve(l,r,L,R)表示询问 ...

  8. 笔记-restful

    笔记-restful 1.      restful简介 restful:representational state transfer,简称REST,描述了一个架构样式的网络系统. 值得注意的是RE ...

  9. PHP.34-TP框架商城应用实例-后台10-商品分类-需求分析、创建无限级商品分类,递归

    商品管理需求分析 1.实现商品无限级分类管理[类似京东三级分类] 2.添加商品时要指定商品属于一个主分类和多个扩展分类[扩展分类可以是其他主分类] 3.商品列表中可以根据分类搜索商品 a) 搜索一个分 ...

  10. chrome 切换到其他网络后重新加载网

    chrome 突然提示 “您与 www.google.com 之间的安全连接目前正受到干扰.  请等待几分钟后再尝试重新加载网页,或在切换到其他网络后重新加载网” 查看证书发现 已经过期 解决:同步下 ...