POJ Building roads [二分答案 2SAT]
睡觉啦
#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]相关推荐
- HDU 1815, POJ 2749 Building roads(2-sat)
HDU 1815, POJ 2749 Building roads 题目链接HDU 题目链接POJ 题意: 有n个牛棚, 还有两个中转站S1和S2, S1和S2用一条路连接起来. 为了使得随意牛棚两个 ...
- UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)
题目要求为 最大化最小值,很明显就是二分答案. 题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT. 我们二分答案,二分着陆时间间隔的最小值 x. 枚举每两个飞机 p , ...
- [poj] 2749 building roads
原题 2-SAT+二分答案! 最小的最大值,这肯定是二分答案.而我们要2-SATcheck是否在该情况下有可行解. 对于目前的答案limit,首先把爱和恨连边,然后我们n^2枚举每两个点通过判断距离来 ...
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
$ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...
- poj 3258 River Hopscotch 二分答案
题目地址: http://poj.org/problem?id=3258 题目思路: 首先,如果只减少一部,那么一定要干掉最短的那段距离(一旦不消灭,最小的还是它,并没有达到使最小值取最大的理想情况) ...
- POJ 1064 Cable master (二分答案)
题目链接:http://poj.org/problem?id=1064 有n条绳子,长度分别是Li.问你要是从中切出m条长度相同的绳子,问你这m条绳子每条最长是多少. 二分答案,尤其注意精度问题.我觉 ...
- poj 1064 java_poj 1064(二分答案)
题意: 有N条绳子,长度分别为 length[1,2,3,........,N]. 如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长有多长? 结果保留两位小数. 题解: 二分可能的长度. AC ...
- POJ 3579 二分答案
POJ 3579 二分答案 文章目录 POJ 3579 二分答案 题目 思路 代码 题目 思路 排序,二分一下答案,然后对于每一个元素看一看加上这个答案tmp之后,在数列里面排在哪里,比a[i]+tm ...
- POJ2018-Best Cow Fences【实数二分答案】
正题 题目链接:http://poj.org/problem?id=2018 大意 有n个数,一段长度不小于L的子段,使他们的平均值最大. 解题思路 二分答案,然后一遍暴力用最大子段和的方法求出是否可 ...
- [BZOJ1626][Usaco2007 Dec]Building Roads 修建道路
1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1730 Solved ...
最新文章
- 一篇文章搞懂fof好友推荐案例
- ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]
- How to install MinGW-w64 and MSYS2?
- java dom获取属性值_java – 获取dom节点的属性
- 时序分析:串匹配-KMP算法
- unity3d 可视化编程_R编程系列:R中的3D可视化
- 3 Sum Closest
- 关于微信和支付宝小程序审核记录分享
- c语言标准函数库怎么建立教程,C语言入门教程-创建一个函数库
- 虹软人脸识别在 linux中so文件加载不到的问题
- Range.EntireRow Property
- 【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
- windows 7计算机用户名和密码忘了,教你电脑密码忘了怎么办
- flyaway mysql_MySQL open table
- 如何用vba做答题、抽点类ppt
- Python小游戏-Las Vegas Black Jack- CASINO (21点)
- 西安达刚公路机电科技有限公司董事长李太杰简介
- 让所有美术生头疼的素描静物,快看你画过没?
- matlab:print命令保存eps文件与figure文件显示不同之解决方法
- java支票金额转换
热门文章
- tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
- 计算机网络—3网络层(路由选择协议、路由表的生成)
- java zip_Java压缩技术(二) ZIP压缩——Java原生实现
- linux支持ext2格式吗,linux正统标准文件系统ext2详解
- Unomi 成为 Apache 软件基金会顶级项目
- SAPI V1.4发布,轻巧的API输出测试组件
- 洛谷P3709 大爷的字符串题(莫队)
- 面对网络灾难风暴Fortinet安立方打造完美方舟
- 初识验收测试管理工具FitNesse
- Cisco路由器DHCP服务器基本配置