la3211
2-sat+二分。。。
每次二分答案然后连边2-sat。。。边要开到n*n
样例水得跟没有一样。。。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
struct edge {
int nxt, to;
} e[N * N << ];
int n, cnt = , top, Time, cot;
int dfn[N], low[N], vis[N], st[N], early[N], late[N], head[N], belong[N];
void link(int u, int v)
{
e[++cnt].nxt = head[u];
head[u] = cnt;
e[cnt].to = v;
}
void tarjan(int u)
{
st[++top] = u; dfn[u] = low[u] = ++Time; vis[u] = ;
for(int i = head[u]; i; i = e[i].nxt)
{
if(!dfn[e[i].to])
{
tarjan(e[i].to);
low[u] = min(low[u], low[e[i].to]);
}
else if(vis[e[i].to]) low[u] = min(low[u], dfn[e[i].to]);
}
if(dfn[u] == low[u])
{
++cot; int x = ;
while(x != u)
{
x = st[top--];
belong[x] = cot;
vis[x] = ;
}
}
}
bool judge(int t)
{
memset(head, , sizeof(head));
memset(dfn, , sizeof(dfn));
memset(low, , sizeof(low));
memset(belong, , sizeof(belong));
cnt = ; top = Time = cot = ;
for(int i = ; i <= n; ++i)
for(int j = ; j <= n; ++j) if(i != j)
{
int x = i << , y = j << ;
if(late[i] - late[j] >= && late[i] - late[j] < t)
link(x, y - ), link(y, x - );
if(late[i] - early[j] >= && late[i] - early[j] < t)
link(x, y), link(y - , x - );
if(early[i] - late[j] >= && early[i] - late[j] < t)
link(x - , y - ), link(y, x);
if(early[i] - early[j] >= && early[i] - early[j] < t)
link(x - , y), link(y - , x);
}
for(int i = ; i <= * n; ++i) if(!dfn[i]) tarjan(i);
for(int i = ; i <= n; ++i) if(belong[i * ] == belong[i * - ]) return false;
return true;
}
int main()
{
while(scanf("%d", &n) != EOF)
{
int l = , r = , ans = ;
for(int i = ; i <= n; ++i) scanf("%d%d", &early[i], &late[i]), r = max(r, late[i]);
while(r - l > )
{
int mid = (l + r) >> ;
if(judge(mid)) ans = l = mid; else r = mid;
}
printf("%d\n", ans);
}
return ;
}
la3211的更多相关文章
- LA3211 Now or later
题目大意:n架飞机,每架可选择两个着落时间.安排一个着陆时间表,使得着陆间隔的最小值最大.(转自http://blog.csdn.net/u013514182/article/details/4233 ...
- 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,不得在其他时间着陆.你的任务是为这些飞机安排着陆方式,使 ...
- 【UVALive - 3211】Now or later (二分+2-SAT)
题意: 有n架飞机需要着陆.每架飞机有两种选择,早着陆或者晚着陆,二选其一.现在为了保证飞机的着陆安全,要求两架着陆的飞机的时间间隔的最小值达到最大. 分析: 最小值最大问题我们想到二分答案.对于猜测 ...
随机推荐
- Docker私有仓库的构建
[root@localhost ~]# vim /etc/sysconfig/docker #INSECURE_REGISTRY='--insecure-registry' INSECURE_REGI ...
- S-HR之代码创建临时表并插入数据
... private String tempTab1 = null; //临时表EcirrWithPPTempTable public String getTempTable() { String ...
- (C/C++学习)23.C++中指针的长度
引言:先看下面一个程序会打印出什么? #include<iostream> using namespace std; int main() { int a = 2; int *p = &a ...
- Maya Calendar POJ - 1008 (模拟)
简述 注意260天的情况,这个地方还是0年 代码 #include <iostream> #include <map> #include <sstream> usi ...
- vue v-model 的注意点
在使用表单元素 input 的 v-model 指令时,碰到一个问题: 如上图,修改 input 的内容,以便随时显示:但显示时明显慢一步. <template> <div> ...
- Python 开发面试题
Python部分 将一个字符串逆序,不能使用反转函数 求从10到100中能被3或5整除的数的和 What is Python? What are the benefits of using Pytho ...
- 洛谷 1472 奶牛家谱 Cow Pedigrees
[题解] DP题,我们用f[i][j]表示有n个节点.高度小于等于j的二叉树的个数.f[i][j]=sigma(f[t][j-1]*f[i-t-1][j-1]) t是1~i-1范围内的奇数. #inc ...
- The Falling Leaves(建树方法)
uva 699 紫书P159 Each year, fall in the North Central region is accompanied by the brilliant colors of ...
- JavaScript学习总结(12)——2016 年 7 个顶级 JavaScript 框架
当涉及到Web开发时,JavaScript框架往往是一些开发人员和企业最受欢迎的平台.可能,你有机会尝试过一两个顶级的JavaScript框架,但你仍然有点不确定哪个才是最佳的最值得掌握的,或者哪个值 ...
- 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...