layout: post

title: 训练指南 UVALive - 3211 (2-SAT + 二分)

author: "luowentaoaa"

catalog: true

mathjax: true

tags:

- 2-SAT

- 图论

- 训练指南


Now or later

UVALive - 3211

题意

n架飞机,每架可选择两个着落时间。安排一个着陆时间表,使得着陆间隔的最小值最大

题解

二分查找最大值P,每次都用2—SAT判断是否可行。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll mod=998244353;
  5. const int maxn=1e6+50;
  6. const ll inf=0x3f3f3f3f3f3f3f3fLL;
  7. struct TwoSAT{
  8. int n;
  9. vector<int> G[maxn*2];
  10. bool mark[maxn*2];
  11. int S[maxn*2],c;
  12. bool dfs(int x){
  13. if(mark[x^1])return false;
  14. if(mark[x])return true;
  15. mark[x]=true;
  16. S[c++]=x;
  17. for(int i=0;i<G[x].size();i++)
  18. if(!dfs(G[x][i]))return false;
  19. return true;
  20. }
  21. void init(int n){
  22. this->n=n;
  23. for(int i=0;i<n*2;i++)G[i].clear();
  24. memset(mark,0,sizeof(mark));
  25. }
  26. /// x=xval or y= yval;
  27. void add_caluse(int x,int xval,int y,int yval){
  28. x=x*2+xval;
  29. y=y*2+yval;
  30. G[x^1].push_back(y);///如果x为真 那么y必须为假;
  31. G[y^1].push_back(x);///如果y为真 那么x必须为假;
  32. }
  33. bool solve(){
  34. for(int i=0;i<n*2;i+=2)
  35. if(!mark[i]&&!mark[i+1]){
  36. c=0;
  37. if(!dfs(i)){
  38. while(c>0)mark[S[--c]]=false;
  39. if(!dfs(i+1))return false;
  40. }
  41. }
  42. return true;
  43. }
  44. };
  45. int n,T[maxn][2];
  46. TwoSAT solver;
  47. bool test(int diff){
  48. solver.init(n);
  49. for(int i=0;i<n;i++)for(int a=0;a<2;a++)
  50. for(int j=i+1;j<n;j++)for(int b=0;b<2;b++)
  51. if(abs(T[i][a]-T[j][b])<diff)solver.add_caluse(i,a^1,j,b^1);
  52. return solver.solve();
  53. }
  54. int main()
  55. {
  56. std::ios::sync_with_stdio(false);
  57. std::cin.tie(0);
  58. std::cout.tie(0);
  59. while(cin>>n&&n){
  60. int L=0,R=0;
  61. for(int i=0;i<n;i++)for(int a=0;a<2;a++){
  62. cin>>T[i][a];
  63. R=max(T[i][a],R);
  64. }
  65. int ans=0;
  66. while(L<=R){
  67. int mid=(L+R)/2;
  68. if(test(mid)){
  69. ans=mid;
  70. L=mid+1;
  71. }
  72. else R=mid-1;
  73. }
  74. cout<<ans<<endl;
  75. }
  76. return 0;
  77. }

UVALive - 3211 (2-SAT + 二分)的更多相关文章

  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 Now or later(2-SAT,二分,Kosaraju)

    题意: 有n个飞机要降落,每机都可以在两个时间点上选择降落.但是两机的降落时间间隔太小会影响安全性,所以,要求两机的降落时间应该达到最大,当然也不能冲突了.问最大的时间间隔是多少?(其实问的是max( ...

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

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

  4. 【二分答案+2-SAT】Now or later UVALive - 3211

    题目链接:https://cn.vjudge.net/contest/209473#problem/J 题目大意: 有n架飞机,每架飞机有两个可降落时间点a,b(a<b)(即一架飞机可以选择在时 ...

  5. UVALive - 3211 Now or later (二分+2SAT)

    题目链接 题意:有n架飞机,每架飞机有两个着陆时间点可以选,要求任意两架飞机的着陆时间之差不超过k,求k的最大值. 解法:由于每架飞机都有两个选择,并且必选且只能选其中一个,时间冲突也是发生在两架飞机 ...

  6. UVALive 3211 Now or later

    每架飞机有早晚起降两种方式,给定n架飞机两种方式的起落时间,为每架飞机安排起落时间(早或晚),使得所有飞机起降时间按照早到晚的顺序之间的间隔时间最小值尽量大. 分析: 最小时间尽量大应该采用二分的方法 ...

  7. 2-sat基础题 uvalive 3211

    蓝书325页的基础题 二分+2-sat //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using n ...

  8. UVALive 3971 Assemble(模拟 + 二分)

    UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...

  9. UVALive 5000 Underwater Snipers --二分

    题意:一条河岸线y=k,y>k区域有n个敌人,现在要在y<=k区域布置S个狙击手,狙击手的狙击范围为距离自己半径为D的圆内,问满足能够狙死所有的敌人的情况下,离河岸线最近的那个狙击手的离河 ...

随机推荐

  1. 【题解】POI2014FAR-FarmCraft

    这题首先手玩一下一下数据,写出每个节点修建软件所需要的时间和到达它的时间戳(第一次到达它的时间),不难发现实际上就是要最小化这两者之和.然后就想到:一棵子树内,时间戳必然是连续的一段区间,而如果将访问 ...

  2. [Leetcode] subsets 求数组所有的子集

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  3. 安徽师大附中%你赛day2T3 巧克力 解题报告

    巧克力 题目描述 小\(T\)有\(N\)块巧克力, 每块巧克力上都有一句话(由小写英文字母组成,不含标点) .现在每块巧克力都断成了若干截,更糟糕的是,有一些碎片丢失了 ,但是剩下的碎片之间的顺序是 ...

  4. C&C++——C与C++知识点

    C++知识点系列之一(转+整理) 编程时类声明后面千万不要忘了加分号,不然会出现很多错误!! c系列之一一.#include “filename.h”和#include<filename.h&g ...

  5. async的用法

    package com.example.administrator.myapplication; import android.os.AsyncTask; import android.util.Lo ...

  6. maven与gradle的对比

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证了Maven的没落和Gradl ...

  7. 自己实现的JDBC工具类

    最近做了个后台应用程序,刚开始用Spring+iBatis来做的,后来因为种种原因,不让用Spring.iBatis以及一些开源的工具包.   于是用JDBC重写了原来的Service实现,项目做完了 ...

  8. es6+最佳入门实践(8)

    8.Promise 8.1.什么是异步? 要理解异步,首先,从同步代码开始说 alert(1) alert(2) 像上面的代码,执行顺序是从上到下,先后弹出1和2,这种代码叫做同步代码 alert(0 ...

  9. Tomcat部署时war和war exploded区别及验证

    war和war exploded的区别 在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded 这里首先看一下他们两个的区别: war模式 ...

  10. 【Foreign】置换 [数论][置换]

    置换 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input 4 2 1 4 3 Sample O ...