蓝书325页的基础题

二分+2-sat

  1. //看看会不会爆int!数组会不会少了一维!
  2. //取物问题一定要小心先手胜利的条件
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. #pragma comment(linker,"/STACK:102400000,102400000")
  6. #define LL long long
  7. #define ALL(a) a.begin(), a.end()
  8. #define pb push_back
  9. #define mk make_pair
  10. #define fi first
  11. #define se second
  12. #define haha printf("haha\n")
  13. const int maxn = + ;
  14.  
  15. struct TwoSAT{
  16. int n;
  17. vector<int> G[maxn];
  18. bool mark[maxn];
  19. int c, s[maxn];///c是表示目前dfs到的个数和已经被标记的集合s
  20. bool dfs(int x){
  21. if (mark[x ^ ]) return false;
  22. if (mark[x]) return true;
  23. mark[x] = true;
  24. s[c++] = x;
  25. for (int i = ; i < G[x].size(); i++)
  26. if (!dfs(G[x][i])) return false;
  27. return true;
  28. }
  29.  
  30. void init(int n){
  31. this->n = n;
  32. for (int i = ; i < * n; i++) G[i].clear();
  33. memset(mark, , sizeof(mark));
  34. }
  35.  
  36. void add_edge(int x, int xval, int y, int yval){
  37. x = x * + xval, y = y * + yval;
  38. G[x ^ ].push_back(y);
  39. G[y ^ ].push_back(x);
  40. }
  41.  
  42. bool solve(){
  43. for (int i = ; i < * n; i += ){
  44. if (!mark[i] && !mark[i + ]){
  45. c = ;
  46. if (!dfs(i)){
  47. while (c) mark[s[--c]] = false;
  48. if (!dfs(i + )) return false;
  49. }
  50. }
  51. }
  52. return true;
  53. }
  54. };
  55.  
  56. TwoSAT sat;
  57. int n;
  58. int E[maxn], L[maxn];
  59. int ti[maxn][];
  60.  
  61. bool test(int p){
  62. sat.init(n);
  63. for (int i = ; i < n; i++){
  64. for (int x = ; x < ; x++){
  65. for (int j = i + ; j < n; j++){
  66. for (int y = ; y < ; y++){
  67. if (abs(ti[i][x] - ti[j][y]) < p){
  68. ///那就说明不成立,因此要建立成立的边
  69. sat.add_edge(i, x ^ , j, y ^ );
  70. }
  71. }
  72. }
  73. }
  74. }
  75. return sat.solve();
  76. }
  77.  
  78. int main(){
  79. while (scanf("%d", &n) == ){
  80. int lb = , rb = ;
  81. for (int i = ; i < n; i++){
  82. scanf("%d%d", E + i, L + i);
  83. ti[i][] = E[i], ti[i][] = L[i];
  84. rb = max(rb, max(E[i], L[i]));
  85. }
  86. rb++;
  87. while (lb < rb - ){
  88. int mid = (lb + rb) / ;
  89. if (test(mid)) lb = mid;
  90. else rb = mid;
  91. }
  92. printf("%d\n",lb);
  93. }
  94. return ;
  95. }

2-sat基础题 uvalive 3211的更多相关文章

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

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

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

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

  3. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  4. 小试牛刀3之JavaScript基础题

    JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...

  5. 小试牛刀2:JavaScript基础题

    JavaScript基础题 1.网页中有个字符串“我有一个梦想”,使用JavaScript获取该字符串的长度,同时输出字符串最后两个字. 答案: <!DOCTYPE html PUBLIC &q ...

  6. HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads

    双向边,基础题,最小生成树   题目 同题目     #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...

  7. nyist oj 79 拦截导弹 (动态规划基础题)

    拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...

  8. linux面试题-基础题1

    第1章 基础题1 1.1 在装系统创建Linux分区时,一般至少需要创建两个分区( ) A.FAT.NTFS   B. /usr.swap    C. /boot.swap  D.swap./ 1.2 ...

  9. Java面试题以及答案精选(架构师面试题)-基础题1

    基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...

随机推荐

  1. 测试bug

    模板在运行时出现了以下 1 个错误:---------------------------Controller.tt(-1,-1) : error : 获取 AppDomain 以便从主机运行转换时出 ...

  2. Spark Shuffle之Hash Shuffle

    源文件放在github,如有谬误之处,欢迎指正.原文链接https://github.com/jacksu/utils4s/blob/master/spark-knowledge/md/hash-sh ...

  3. (转)Elasticsearch search-guard 插件部署

    我之前写了ELK+shield的部署文档,由于shield是商业收费的,很多人都推崇开源项目search-guard来做ELK的安全组件,准确来说是elasticsearch的安全组件.search- ...

  4. 树形结构的数据库表Schema设计-基于左右值编码

    树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的 ...

  5. nodejs 调试

    什么语言入门的准备功能就是写helloworld, 调试. 用惯了chrome的话,推荐用chrome自带的调试器来调试.很方便. 在地址栏中输入 chrome://inspect 并按回车,会打开如 ...

  6. Java设计模式 - 单例模式 (懒汉方式和饿汉方式)

    概念: Java中单例模式是一种常见的设计模式,单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的写法有好几种,这 ...

  7. 主流的RPC框架有哪些

    RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展.Java中的RPC框架比较多,各有特色,广泛使用的有RMI.Hessian.Dubbo等.RPC还 ...

  8. ZOJ2686_Cycle Gameu

    题目的意思是给你一个多边形,每条边上有一个权值,你开始在第一个点.每次你必须经过一条有权值的边,并且把该边的权值减小到任意一个非负值,到达该边的另外一个点. 谁第一个无法操作就算输. 题意很简单,解法 ...

  9. RxSwift基本使用(一)

    备注:本文参考自田腾飞博文 [RxSwift入坑解读-你所需要知道的各种概念] (http://www.codertian.com/2016/11/27/RxSwift-ru-keng-ji-read ...

  10. 【bzoj3533】[Sdoi2014]向量集 线段树+STL-vector维护凸包

    题目描述 维护一个向量集合,在线支持以下操作:"A x y (|x|,|y| < =10^8)":加入向量(x,y);"Q x y l r (|x|,|y| < ...