题目要求为 最大化最小值,很明显就是二分答案。
题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT。

我们二分答案,二分着陆时间间隔的最小值 x。

枚举每两个飞机 p , q 的 4 种状态

设现在枚举的这个情况中,p 的着陆时间为 a,q 的着陆时间为 b,则若 ∣a−b∣<x|a-b|<x∣a−b∣<x那么就要在相应的状态间连边(表示这两个状态只能二选一,也就是询问所有间隔小于x 的边所相连的两个状态都不能同时成立能否被满足)。

注意本题中数据有重边,要用vector,不然会RE

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>using namespace std;
typedef long long ll;
const int N = 5000007, M = 5000007, INF = 0x3f3f3f3f;int n, m;
int dfn[N], low[N], num;
int head[N], ver[M], nex[M], tot;
vector<int>g[N];
int a[N][2];
int stk[N], top, scc_cnt;
bool ins[N];
int color[N];void add(int x, int y){ver[tot] = y;nex[tot] = head[x];head[x] = tot ++ ;
}void tarjan(int x)
{dfn[x] = low[x] = ++ num;stk[++ top] = x;ins[x] = true;for(size_t i = 0; i < g[x].size(); ++ i){int y = g[x][i];if(!dfn[y]){tarjan(y);low[x] = min(low[x], low[y]);}else if(ins[y])low[x] = min(low[x], dfn[y]);}if(low[x] == dfn[x]){int y;++ scc_cnt;color[x] = scc_cnt;do{y = stk[top -- ];ins[y] = false;color[y] = scc_cnt;}while(x != y);}return ;
}inline bool check(int x){//memset(head, -1, sizeof head);for(int i = 1; i <= 2 * n; ++ i)g[i].clear();memset(dfn, 0, sizeof dfn);memset(low, 0, sizeof low);memset(color, 0, sizeof color);memset(ins, 0, sizeof ins);tot = num = scc_cnt = 0;//0 : -x : E 早 : i//1 : x : L 晚 : i + n//比较之后的两个相差的时间是否小于x//如果小于x的话那么两者就不能同时出现(同时为true)for(int p = 1;p <= n;++ p){for(int c = 0; c <= 1; ++ c){for(int q = p + 1; q <= n; ++ q){for(int d = 0; d <= 1; ++ d){if(abs(a[p][c] - a[q][d]) < x){/*if(c && d){//11 -> 01, 01add(p, q + n);add(q, p + n);}else if(!c && d){//01 -> 11, 00add(p + n, q + n);add(q, p);}else if(c && !d){//10 -> 00, 11add(p, q);add(q + n, p + n);}else if(!c && !d){//00 -> 10, 01add(p + n, q);add(q + n, p);}*/g[p + n * c].push_back(q + n * (d ^ 1));g[q + n * d].push_back(p + n * (c ^ 1));}}}}}for(int i = 1; i <= 2 * n; ++ i)if(!dfn[i])tarjan(i);for(int i = 1; i <= n; ++ i){if(color[i] == color[i + n])return false;}return true;
}void solve(){int l = 0, r = 0, ans = -1;for(int i =1; i <= n; ++ i)scanf("%d%d", &a[i][0], &a[i][1]), r = max(max(a[i][1], a[i][0]), r);while(l <= r){int mid = l + r >> 1;if(check(mid))ans = mid, l = mid + 1;else r = mid - 1;}printf("%d\n", ans);return ;
}int main()
{while(scanf("%d", &n) != EOF){solve();}return 0;
}

UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)相关推荐

  1. UVA1342 That Nice Euler Circuit(ACM - ICPC 2004 Asia - Shanghai)(计算几何、欧拉定理)

    整理的算法模板合集: ACM模板 欧拉定理:设平面图的顶点数.边数和面数分别为V,E,F,则V+F-E=2. #include<bits/stdc++.h> using namespace ...

  2. UVA1391 Astronauts(ACM - ICPC 2006 Europe - Central)(2 - SAT问题、输出方案)

    虽然题目里有A.B.C三种状态,但是每个人只有两个状态可以选择,显然是一道2-SAT: 建图的话,假设选择A(或者B)为i+n,选择C为i:首先当两个人讨厌时,一个人选C,则另一个一定选另一个,连两条 ...

  3. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM 最早听说ACM/ICP ...

  4. PKU ACM/ICPC竞赛队最近八年比赛成绩

    PKU ACM/ICPC竞赛队最近八年比赛成绩 (不含预选赛前十名以外) 竞赛名称 年度 获奖名次 学生姓名 备 注 第29届ACM国际 大学生程序设计竞赛 亚洲区预选赛 2004 北京赛区第4名 饶 ...

  5. 厦门大学lonekight ACM/ICPC 回忆录

    初识ACM 最早听说ACM/ICPC这项赛事是在大三上的算法课上张老师提到的,当时我们学校的组织参加这项活动才刚刚起步,我也没太在意,总觉得那是非常遥远的事,事实上当时我也从未相当如今我们能获得现在的 ...

  6. 超励志!杭电第六次打入“ACM/ICPC”全球总决赛!

    小编说: 前几天都在发 考研初试/真题 有关的内容,头条一直没有空余,所以现在才发. 杭电是计算机专业双非中最有名的学校之一,在公众号的投票[计算机最强的双非大学]中排名第一. [计算机最强的双非大学 ...

  7. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. 2019 ACM - ICPC 西安邀请赛 B. Product (杜教筛) 简单数论(bushi)

    G.(2019 ACM/ICPC 全国邀请赛(西安)B) Product Weblink https://nanti.jisuanke.com/t/39269 Problem && S ...

  9. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. iptables配置管理
  2. nginx+uwsgi+django1.6 配置过程
  3. 2018-2019-1 20165226 《信息安全系统设计基础》第8周学习总结
  4. mysql修改虚拟列属性失败_mysql虚拟列(Generated Columns)及JSON字段类型的使用
  5. MongoDB与Spring集成教程
  6. python 中decorator和property
  7. EOSPlatform+Dubbo+Zookeeper最佳实践
  8. iOS开发中通知(Notification)快速入门及推送通知实现教程
  9. 小学计算机英语,小学英语电脑版
  10. DOORS8.0的安装和基本使用
  11. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...
  12. excel编辑csv文件
  13. iOS开发- 以图搜图功能实现 (源码+解析)
  14. Python画玫瑰花
  15. vue 天气插件的使用
  16. C51串口的SCON寄存器及工作方式
  17. MATLAB循环调用函数使用并行池指南(带非官方实际例子)
  18. NDSS 2022 接收的列表
  19. 蓝牙低功耗技术的传输速率
  20. ruby sinatra mysql_Ruby web微框架 – sinatra

热门文章

  1. 经验 | 秋招总结(拼多多,腾讯,百度,字节)
  2. 构建神经网络前你需要先考虑这10件事
  3. 【分享】计算机视觉方向必备opencv基础知识总览
  4. MongoDB中mapReduce的使用
  5. Java面向对象----封装概念
  6. ubuntu samba 安装
  7. 用C语言实现素数筛法获取一亿(100000000)以内的全部素数
  8. 使用内存映射文件在进程之间共享数据
  9. 记录一次frp失效bug
  10. php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()