题目大意:n架飞机,每架可选择两个着落时间。安排一个着陆时间表,使得着陆间隔的最小值最大。(转自http://blog.csdn.net/u013514182/article/details/42333363)

每个飞机有两个选择:时间1或时间2,分别用xi和x'表示。最小值最大,考虑二分答案ans;

对于任意两家飞机x,y,x选择时间k,y选择时间l,如果时间差小于ans,说明1、x选k后y必须不能选l,2、y选l后x必须不能选k

边开小了,疯狂RE,边居然要开到千万级别。。。竟然出了这么极端的数据专门卡空间。。。出题人真XX

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <cmath>
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
#define abs(a) ((a) < 0 ? (-1 * (a)) : (a))
template<class T>
inline void swap(T &a, T &b)
{
T tmp = a;a = b;b = tmp;
}
inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '') c = ch, ch = getchar();
while(ch <= '' && ch >= '') x = x * + ch - '', ch = getchar();
if(c == '-') x = -x;
}
const int INF = 0x3f3f3f3f;
const int MAXN = + ;
struct Edge
{
int u,v,nxt;
Edge(int _u, int _v, int _nxt){u = _u;v = _v;nxt = _nxt;}
Edge(){}
}edge[];
int head[MAXN], cnt;
inline void insert(int a, int b)
{
edge[++ cnt] = Edge(a, b, head[a]), head[a] = cnt;
}
int n, t[MAXN][], dfn[MAXN], dfst, low[MAXN], b[MAXN], bb[MAXN], group, belong[MAXN], stack[MAXN], top;
void dfs(int u)
{
b[u] = bb[u] = , stack[++ top] = u, dfn[u] = low[u] = ++ dfst;
for(int pos = head[u];pos;pos = edge[pos].nxt)
{
int v = edge[pos].v;
if(!b[v]) dfs(v), low[u] = min(low[v], low[u]);
else if(bb[v]) low[u] = min(low[u], dfn[v]);
}
if(low[u] == dfn[u])
{
++ group;
int now = -;
while(now != u) now = stack[top --], belong[now] = group, bb[now] = ;
}
} void tarjan()
{
dfst = , group = , memset(belong, , sizeof(belong)), memset(dfn, , sizeof(dfn)), memset(low, , sizeof(low)), memset(b, , sizeof(b)), memset(bb, , sizeof(bb));
for(int i = ;i <= n;++ i) if(!b[i << ]) dfs(i << );
for(int i = ;i <= n;++ i) if(!b[i << | ]) dfs(i << | );
} int check(int m)
{
memset(head, , sizeof(head)), cnt = ;
for(int i = ;i <= n;++ i)
for(int k = ;k <= ;++ k)
for(int j = i + ;j <= n;++ j)
for(int l = ; l <= ;++ l)
if(abs(t[i][k] - t[j][l]) < m)
insert(i << | k, j << | (l ^ )), insert(j << | l, i << | (k ^ ));
tarjan();
for(int i = ;i <= n;++ i) if(belong[i << ] == belong[i << | ]) return ;
return ;
} int main()
{
while(scanf("%d", &n) != EOF)
{
int l = , r = , mid, ans = ;
for(int i = ;i <= n;++ i) read(t[i][]), read(t[i][]), r = max(r, max(t[i][], t[i][]));
while(l <= r)
{
mid = (l + r) >> ;
if(check(mid)) l = mid + , ans = mid;
else r = mid - ;
}
printf("%d\n", ans);
}
return ;
}

LA3211

LA3211 Now or later的更多相关文章

  1. LA3211 飞机调度 Now or later-二分法&TwoSet

    https://vjudge.net/problem/UVALive-3211 As you must have experienced, instead of landing immediately ...

  2. 【LA3211 训练指南】飞机调度 【2-sat】

    题意 有n嫁飞机需要着陆.每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种.第i架飞机的早着陆时间为Ei,晚着陆时间为Li,不得在其他时间着陆.你的任务是为这些飞机安排着陆方式,使 ...

  3. la3211

    2-sat+二分... 每次二分答案然后连边2-sat...边要开到n*n 样例水得跟没有一样... #include<bits/stdc++.h> using namespace std ...

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

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

随机推荐

  1. idea在同一窗口创建多个项目(详细步骤)

    需要创建的项目目录结构 1.file——>项目结构 2.创建一个新的模块

  2. Rainbow的信号

    Rainbow的信号 有一串长度为n的数列,现在从中等概率选出l,r,如果l大于r,则交换,有三个询问 l~r间的数与和的数学期望 l~r间的数或和的数学期望 l~r间的数异或和的数学期望 对于100 ...

  3. leetcode-109-有序链表转二叉搜索树

    ---恢复内容开始--- 题目描述: 方法一:O(n) O(n) class Solution: def sortedListToBST(self, head: ListNode) -> Tre ...

  4. thinkphp 动态查询

    借助PHP5语言的特性,ThinkPHP实现了动态查询,核心模型的动态查询方法包括下面几种: 方法名 说明 举例 getBy 根据字段的值查询数据 例如,getByName,getByEmail ge ...

  5. token方法可用于临时关闭令牌验证,

    token方法可用于临时关闭令牌验证,例如: $model->token(false)->create(); 即可在提交表单的时候临时关闭令牌验证(即使开启了TOKEN_ON参数). 大理 ...

  6. csps模拟68d,e,f题解

    题面:https://www.cnblogs.com/Juve/articles/11655531.html 三道数据结构? d: 贪心,先按a排序,然后枚举删了前i个a值比较小的,然后在剩下的里面删 ...

  7. php链表笔记:链表的检测

    <?php /** * Created by PhpStorm. * User: huizhou * Date: 2018/12/2 * Time: 11:48 */ /** * 链表的检测 * ...

  8. SpringCloud学习笔记(五):Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...

  9. Maven实战08_仓库

    何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ...

  10. 11_数据降维PCA

    1.sklearn降维API:sklearn. decomposition 2.PCA是什么:主成分分析 本质:PCA是一种分析.简化数据集的技术. 目的:是数据维数压缩,尽可能降低原数据的维数(复杂 ...