题意:

  有n个飞机要降落,每机都可以在两个时间点上选择降落。但是两机的降落时间间隔太小会影响安全性,所以,要求两机的降落时间应该达到最大,当然也不能冲突了。问最大的时间间隔是多少?(其实问的是max(每种方案中两机间的最小间隔) )

思路:

  二分穷举每个时间间隔,对于每个间隔,建反向图,对图进行DFS着色看是否有冲突,无冲突的话证明此间隔是可以实现的。要找一个可以实现的,且间隔最大的。

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <stack>
#include <algorithm>
#include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=+;
int n, s[N*], c=, col[N*], early[N], late[N];
vector<int> vect[N*]; bool color(int x)
{
if(col[x^]) return false; //(x,x^1)这一对已经选好了x^1,你还想选x,肯定矛盾。
if(col[x]) return true; //你要选的,刚好已选。
col[x]=true;
s[c++]=x;
for(int i=; i<vect[x].size(); i++)
{
int t=vect[x][i];
if(!color(t)) return false; //染色不成功
}
return true;
} int cal(int dis)
{
for(int i=; i<n*; i++) vect[i].clear();
for(int i=; i<n; i++) //建图
{
for(int j=; j<n; j++)
{
if(i==j) continue;
if( abs(early[i]-early[j])<dis ) vect[j*+ ].push_back(i* );
if( abs(early[i]-late[j]) <dis ) vect[j* ].push_back(i* );
if( abs(late[i] -early[j])<dis ) vect[j*+].push_back(i*+);
if( abs(late[i] -late[j]) <dis ) vect[j*].push_back(i*+);
}
}
memset(col,,sizeof(col)); //所有着色的都是要的
memset(s,,sizeof(s)); //作为栈记录此次失败所标记过的,回头只需将栈中的点去掉标记
for(int i=; i<n*; i+=)
{
if(!col[i] && !col[i+]) //都还未着色,如果有1个已经着色,那这对就已经选好了
{
c=;
if( !color(i))
{
while(c) col[s[--c]]=; //选i是不行的,要清除刚才的着色。
if(!color(i+)) return false; //i不行,就从i+1开始着色试试。
}
}
}
return true;
} int main()
{
freopen("input.txt", "r", stdin);
int a, b, up;
while(~scanf("%d",&n))
{
memset(early,,sizeof(early));
memset(late,,sizeof(late));
up=;
for(int i=; i<n; i++)
{
scanf("%d%d",&early[i],&late[i]);
up=max(late[i],up);
} int l=, r=up;
while(l<=r)
{
int mid=(l+r)/;
if(cal(mid)) l=mid+;
else r=mid-;
}
printf("%d\n",l-);
} return ;
}

AC代码

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

  1. 【UVALive - 3211】Now or later (二分+2-SAT)

    题意: 有n架飞机需要着陆.每架飞机有两种选择,早着陆或者晚着陆,二选其一.现在为了保证飞机的着陆安全,要求两架着陆的飞机的时间间隔的最小值达到最大. 分析: 最小值最大问题我们想到二分答案.对于猜测 ...

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

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

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

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

  4. 【二分答案+2-SAT】Now or later UVALive - 3211

    题目链接:https://cn.vjudge.net/contest/209473#problem/J 题目大意: 有n架飞机,每架飞机有两个可降落时间点a,b(a<b)(即一架飞机可以选择在时 ...

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

    题目链接 题意:有n架飞机,每架飞机有两个着陆时间点可以选,要求任意两架飞机的着陆时间之差不超过k,求k的最大值. 解法:由于每架飞机都有两个选择,并且必选且只能选其中一个,时间冲突也是发生在两架飞机 ...

  6. UVALive 3211 Now or later

    每架飞机有早晚起降两种方式,给定n架飞机两种方式的起落时间,为每架飞机安排起落时间(早或晚),使得所有飞机起降时间按照早到晚的顺序之间的间隔时间最小值尽量大. 分析: 最小时间尽量大应该采用二分的方法 ...

  7. 2-sat基础题 uvalive 3211

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

  8. LA 3211 飞机调度(2—SAT)

    https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...

  9. UVALive 6609 Minimal Subarray Length(RMQ-ST+二分)

    题意:给定长度为N的数组,求一段连续的元素之和大于等于K,并且让这段元素的长度最小,输出最小长度即可,若不存在这样的元素集合,则输出-1 题目链接:UVAlive 6609 做法:做一个前缀和pref ...

随机推荐

  1. 《C和指针》 读书笔记 -- 第10章 结构和联合

    1.聚合数据类型能够同时存储超过一个的单独数据,c提供了两种类型的聚合数据类型,数组和结构. 2.[1] struct SIMPLE { int a; }; struct SIMPLE x; [2] ...

  2. Linux学习系列之Linux入门(二)Vim学习

    第二篇 Vim学习 主要内容: 基本命令: 插件扩展: 参考资料: vim是一个命令控制的文本编辑器,可以完成几乎我们想要做的所有工作,除了Emacs几乎没有其他的工具能和它匹敌.官方网站是:http ...

  3. SRM 616 ColorfulCoins

    题意:给定一个从小到大的货币面值,每一个面额都是其前面面额的倍数(倍数大于等于2),每一种货币面值对应一种颜色,目前不清楚面值与颜色的对应关系.要求用最少的查询次数来确定面额与颜色的对应关系.(一次查 ...

  4. iOS 基础 第一天(0804)

    OC对象的本质就是一个结构体 为什么说是个结构体? 例如:类里面声明了几个成员变量\实例变量(已添加@plublic),外部对象的指针在访问这个变量的时候是这么写的p->a 0804 注意oc的 ...

  5. myEclipse中的web项目直接引入到eclipse中运行

    首先打开项目属性(Properties),如果动态web项目被作为普通java项目引进去,需要首先修改为web项目,如下图: 确定后即可在eclipse中看到转换为了动态的web项目,然后继续属性(P ...

  6. 如何让VS根据编译环境选择相应的配置文件

    其实微软还是蛮有创造力的,一个配置文件居然弄了这么多的形式,从原来的ini到现在的xml,总而言之让我们这些在微软殿堂里的程序员翘着屁股追赶. 微软最新的配置文件实际上就是个xml文件,以后缀名.co ...

  7. 然爸读书笔记(2013-5)----Rework(重来)

    (1)你没有必要耗尽你一生的积蓄,承担财务风险. (2)你可以一边继续日常工作,一边开始创业,这样随时都能有现金满足需要.你甚至不需要办公室. 现在可以在家工作,和从未见面离你千里之外的人合作. (3 ...

  8. Mybatis 一对一、一对多、多对多关联之级联添加

    示例项目:MIPO_CRM 一.一对一关联 示例:订单与销售机会 描述:在业务员与客户的联系人的联系记录中可以生成一条销售机会,而此条销售机会可生成一条订单,两者呈一对一关联. 1.表设计 oppor ...

  9. flash链接需要后台调用时的插入flash方法

    <!--<textarea id="syslink" style="display:none;">// 1:打宝塔 2:山寨玩法 3:跨服竞技 ...

  10. 解决Oracle ORA-00984: column not allowed here

    某列是字符列,结果忘记加单引号了 INSERT INTO prt_document_present (company_code, doc_no, seq_no, field_name, desc_ms ...