LA3211 Now or later
题目大意: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的更多相关文章
- LA3211 飞机调度 Now or later-二分法&TwoSet
https://vjudge.net/problem/UVALive-3211 As you must have experienced, instead of landing immediately ...
- 【LA3211 训练指南】飞机调度 【2-sat】
题意 有n嫁飞机需要着陆.每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种.第i架飞机的早着陆时间为Ei,晚着陆时间为Li,不得在其他时间着陆.你的任务是为这些飞机安排着陆方式,使 ...
- la3211
2-sat+二分... 每次二分答案然后连边2-sat...边要开到n*n 样例水得跟没有一样... #include<bits/stdc++.h> using namespace std ...
- 【UVALive - 3211】Now or later (二分+2-SAT)
题意: 有n架飞机需要着陆.每架飞机有两种选择,早着陆或者晚着陆,二选其一.现在为了保证飞机的着陆安全,要求两架着陆的飞机的时间间隔的最小值达到最大. 分析: 最小值最大问题我们想到二分答案.对于猜测 ...
随机推荐
- VMware Workstation 10 简体中文安装教程
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 分享到 一键分享 QQ ...
- C#查找List 某一段数据
public void SelectData() { List<int> r = new List<int>(); r.Add(); r.Add(); r.Add(); r.A ...
- 1、docker centos 安装
Docker for CentOS: 第一步:使用官方yum仓库 [root@linux-node1 ~]# yum install -y yum-utils [root@linux-node1 ~] ...
- EasyNetQ异常处理
代码下载 https://download.csdn.net/download/u010312811/11252093 官方Demo https://github.com/EasyNetQ/EasyN ...
- 网站时间显示——基于Date
网站时间显示 代码实现如下: =============css样式=================== <style> #show{ width: 460px; height: 100p ...
- 0823NOIP模拟测试赛后总结
考了两场感觉虚了... NOIP模拟测试30 分着考的. 就只有T2的美妙的暴力拿分了,60分rank10,挂了. T1是一道sb题,爆零了十分遗憾. 许多人都掉进了输出格式的坑里,C没大写.少个空格 ...
- Jenkins 简单安装使用
一.介绍 Jenkins 是一款业界流行的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能.由于 jenkins是基于java环境运行的,所以首先需要安装java环境 二.安装 1 ...
- JS Math.sin() 与 Math.cos() 用法 (含圆上每个点的坐标)
Math.sin(x) x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x) x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指 ...
- css---switch开关
html: <label><input class="mui-switch" type="checkbox"> 默认未选中</la ...
- Java-slf4j:sfl4j
ylbtech-Java-slf4j:sfl4j 1.返回顶部 1. SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种 ...