题目链接

题意:有n架飞机,每架飞机有两个着陆时间点可以选,要求任意两架飞机的着陆时间之差不超过k,求k的最大值。

解法:由于每架飞机都有两个选择,并且必选且只能选其中一个,时间冲突也是发生在两架飞机之间的,因此二分答案,对冲突的时间建边处理,然后跑2SAT即可。

 #include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
const int N=+;
struct E {
int v,nxt;
} e[N*N];
int n,hd[N],ne;
void init() {memset(hd,-,sizeof hd); ne=;}
void addedge(int u,int v) {e[ne]= {v,hd[u]},hd[u]=ne++;} int dfn[N],low[N],scc[N],sta[N],nscc,nsta,tot;
void dfs(int u) {
dfn[u]=low[u]=++tot;
sta[nsta++]=u;
for(int i=hd[u]; ~i; i=e[i].nxt) {
int v=e[i].v;
if(!dfn[v])dfs(v),low[u]=min(low[u],low[v]);
else if(!scc[v])low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u]) {
nscc++;
for(; !scc[u]; scc[sta[--nsta]]=nscc);
}
}
void getscc() {
memset(dfn,,sizeof dfn);
memset(scc,,sizeof scc);
tot=nscc=nsta=;
for(int i=; i<n*; ++i)if(!dfn[i])dfs(i);
} int x[N],y[N];
int p1(int x) {return x<<;}
int p2(int x) {return x<<|;} bool ok(int k) {
init();
for(int i=; i<n; ++i)
for(int j=i+; j<n; ++j) {
if(abs(x[i]-x[j])<k)addedge(p1(i),p2(j)),addedge(p1(j),p2(i));
if(abs(x[i]-y[j])<k)addedge(p1(i),p1(j)),addedge(p2(j),p2(i));
if(abs(y[i]-x[j])<k)addedge(p2(i),p2(j)),addedge(p1(j),p1(i));
if(abs(y[i]-y[j])<k)addedge(p2(i),p1(j)),addedge(p2(j),p1(i));
}
getscc();
for(int i=; i<n; ++i)if(scc[p1(i)]==scc[p2(i)])return false;
return true;
} int bi(int l,int r) {for(int mid; l<r; mid=(l+r+)>>,ok(mid)?l=mid:r=mid-); return l;} int main() {
while(scanf("%d",&n)==) {
for(int i=; i<n; ++i)scanf("%d%d",&x[i],&y[i]);
printf("%d\n",bi(,(int)1e7));
}
return ;
}

UVALive - 3211 Now or later (二分+2SAT)的更多相关文章

  1. UVa 3211 Now or later (二分+2-Sat)

    题意:有 n 架飞机,每个飞机早着陆,或者晚着陆,让你安排一个方式,让他们着陆的时间间隔尽量大. 析:首先对于时间间隔,可以用二分来解决,然后就成了一个判定性问题,然后怎么判断该时间间隔是不是成立呢, ...

  2. UVALive 3211 Now or later(2-sat)

    2-sat问题,一种在两种可能性中选择必然关系的问题. 推荐两篇论文,也是学2-sat公认比较好的材料.前者较好理解,后者需耐心看. http://www.google.com.hk/url?sa=t ...

  3. UVALive 3211 Now or Later (2-SAT)

    题目的要求一个最小值最大,二分即可,但是怎么判断呢? 飞机早或者晚两种状态,可以用一个布尔变量表示,假设当前猜测为m,那么根据题意, 如果x和y所对应的时间冲突那么就是¬(xΛy)化成或的形式(¬x) ...

  4. UVALive 3211 : Now or later 【2-SAT】

    题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; ; struct TwoSAT { int n; vect ...

  5. UVALive - 3211 (2-SAT + 二分)

    layout: post title: 训练指南 UVALive - 3211 (2-SAT + 二分) author: "luowentaoaa" catalog: true m ...

  6. UVALive - 3211 - Now or later(图论——2-SAT)

    Problem   UVALive - 3211 - Now or later Time Limit: 9000 mSec Problem Description Input Output Sampl ...

  7. 2-sat基础题 uvalive 3211

    蓝书325页的基础题 二分+2-sat //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using n ...

  8. HDU 3622 Bomb Game(二分+2SAT)

    题意:有一个游戏,有n个回合,每回合可以在指定的2个区域之一放炸弹,炸弹范围是一个圈,要求每回合的炸弹范围没有重合.得分是炸弹半径最小的值.求可以得到的最大分数. 思路:二分+2SAT. 二分炸弹范围 ...

  9. hdu 3622 二分+2-sat

    /* 二分+2-sat 题意:在一个二维平面上给你n个炸弹,和2*n个位置,每一行的两个位置只能有一个放炸弹 现在炸弹爆炸有一个半径,当炸弹爆炸时两个炸弹的半径化成的圆不能相交,求最大半径 二分半径, ...

随机推荐

  1. cookie、Session工作原理

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...

  2. centos6 没有eth0网络

    编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 ONREBOOT=no #改成yes service network restart 在用 ifconfig ...

  3. samtools+bcftools 进行SNP calling

    两个软件的作用:1.samtools mpileup 主要是用于收集BAM文件中的信息,这个位点上有多少条read匹配,匹配read的碱基是什么,并将这些信息存储在BCF文件中.2.bcftools ...

  4. 外网IP地址API

    新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://int.dpool. ...

  5. 20145240 《Java程序设计》第三次实验报告

    20145240 <Java程序设计>第三次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验 ...

  6. Qt+数据库

    前言支持内置数据库: 一.sqlite 1.在头文件中声明数据库对象 QSqlDatabase db; 2.在构造函数中定义对象(最好这样定义,因为对于db来说只需要addDatabase一次,否则多 ...

  7. SpringBoot Mybatis keyProperty和useGeneratedKeys的作用

    在使用mybatis时,常常会出现这种需求: 当主键是自增的情况下,添加一条记录的同时,其主键是不能被使用的(为空),但是有时我们需要该主键,这时我们该如何处理呢?这时我们只需要在其对应xml中加入以 ...

  8. IDEA中集成JRebel插件

    下载下面2个插件 jr-ide-intellij-6.4.3_13-16.zip --- 官网的jar(地址:https://plugins.jetbrains.com/plugin/4441-jre ...

  9. codeforces 439C 模拟

    http://codeforces.com/problemset/problem/439/C 题意:给你n个数,分成k个非空集合,其中有p个集合的元素和为偶数,其余k-p个集合的元素和为奇数. 思路: ...

  10. 出现GC overhead limit exceeded 的解决方案

    当我在使用MyEclispe IDE创建Maven项目的时候出现  "An internal error occurred during: “Build Project”. GC overh ...