poj3683(2-SAT)
题目大概意思为有一个神父,N场婚礼,给每场婚礼的开始时间 S ,结束时间 T ,和持续时间 D ,神父可以在开始 S 到 S + D 时,或者结束 T - D 到 T 时,两选一时间段在场,神父从不同婚礼上穿梭的时间忽略不计,现在问神父是否能在所有婚礼上出现,若是可以输出所有婚礼的神父在场时间段
每次婚礼都有两种可选择,相当于布尔真假,且有一定限制条件,妥妥的2-SAT
连边只要搞清楚 2-SAT 的原理即可,我们连边(A,B),就相当于选 A 就必须选 B,因此判断假如两场婚礼 a , b ,初始为 A ,末尾为 B ,如果 a_A 和 b_B 有交集,则相当于选了 a_A 就必须选 b_A,选 b_B 就必须选 a_B,把这个弄清楚就可以开始判断各个范围之间是否有交集,构造图
最后套个2-SAT模板即可
(基础 2-SAT 题无坑无难点)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
struct ddd
{int start, over, spend;
}data[1005];
vector<int> edge[2005];
vector<int> redge[2005];
vector<int> flag;
int used[10005];
int kind[10005];
int N;
void dfs(int v)
{used[v] = true;for(int i = 0; i < edge[v].size(); i++){if(!used[edge[v][i]]){dfs(edge[v][i]);}}flag.push_back(v);
}
void rdfs(int v, int k)
{used[v] = true;kind[v] = k;for(int i = 0; i < redge[v].size(); i++){if(!used[redge[v][i]]){rdfs(redge[v][i], k);}}
}
int main()
{scanf("%d", &N);for(int i = 0; i < N; i++){int hour, minutes;scanf("%d:%d", &hour, &minutes);data[i].start = hour * 60 + minutes;scanf("%d:%d", &hour, &minutes);data[i].over = hour * 60 + minutes;scanf("%d", &data[i].spend);}for(int i = 0; i < N; i++){for(int j = i + 1; j < N; j++){if(min(data[i].start + data[i].spend, data[j].start + data[j].spend) > max(data[i].start, data[j].start)){edge[i].push_back(j + N);edge[j].push_back(i + N);redge[j + N].push_back(i);redge[i + N].push_back(j);}if(min(data[i].start + data[i].spend, data[j].over) > max(data[i].start, data[j].over - data[j].spend)){edge[i].push_back(j);edge[j+N].push_back(i+N);redge[j].push_back(i);redge[i+N].push_back((j+N));}if(min(data[i].over, data[j].start + data[j].spend) > max(data[i].over - data[i].spend, data[j].start)){edge[i+N].push_back(j+N);edge[j].push_back(i);redge[j+N].push_back(i+N);redge[i].push_back(j);}if(min(data[i].over, data[j].over) > max(data[i].over - data[i].spend, data[j].over - data[j].spend)){edge[i+N].push_back(j);edge[j+N].push_back(i);redge[j].push_back(i+N);redge[i].push_back(j+N);}}}memset(used, false, sizeof(used));for(int i = 0; i < N; i++){if(!used[i]) dfs(i);}memset(used, false, sizeof(used));int num = 0;for(int i = flag.size() - 1; i >= 0; i--){if(!used[flag[i]]) rdfs(flag[i], num++);}for(int i = 0; i < N; i++){if(kind[i] == kind[i + N]){printf("NO\n");return 0;}}printf("YES\n");for(int i = 0; i < N; i++){if(kind[i] > kind[i + N]){printf("%02d:%02d %02d:%02d\n", data[i].start / 60, data[i].start % 60, (data[i].start + data[i].spend) / 60, (data[i].start + data[i].spend) % 60);}else{printf("%02d:%02d %02d:%02d\n", (data[i].over - data[i].spend) / 60, (data[i].over - data[i].spend) % 60, data[i].over / 60, data[i].over % 60);}}
}
poj3683(2-SAT)相关推荐
- (2 sat) hdu 1824
Let's go home Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 嵌入式系统开发:基于Linux学习笔记整理(学期汇总)
Linux命令操作部分 Ubuntu虚拟机使用 快照 拍摄快照是为了方便还原虚拟机,因为虚拟机(Virtual Machine)是虚拟出来的出来的一台物理计算机,如果你在实验中操作不当或者其他原因导致 ...
- 第6-8课:分离轴算法(SAT)与碰撞检测(图文篇)
物体的碰撞检测是游戏软件中的关键算法之一,两个角色是否能够对话.子弹是否击中了物体,以及是否出现人物穿墙的 bug,都依赖于一套可靠的碰撞检测算法.有很多算法可以实现碰撞检测,基于算法几何的方法有轴对 ...
- R语言用WinBUGS 软件对学术能力测验(SAT)建立层次(分层)贝叶斯模型
R2WinBUGS软件包提供了从R调用WinBUGS的便捷功能.它自动以WinBUGS可读的格式写入数据和脚本,以进行批处理(自1.4版开始).WinBUGS流程完成后,可以通过程序包本身将结果数据读 ...
- R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型
原文链接:http://tecdat.cn/?p=11974 R2WinBUGS软件包提供了从R调用WinBUGS的便捷功能.它自动以WinBUGS可读的格式写入数据和脚本,以进行批处理(自1.4版开 ...
- 布尔表达式可满足性问题(SAT)与库克-列文定理(上)
下篇:布尔表达式可满足性问题(SAT)与库克-列文定理(下). 文章目录 一.布尔表达式可满足性问题(Boolean Satisfiability Problem, SAT) 二.形式语言与自动机 1 ...
- 年度盘点!必看AI顶会论文、Github高星项目大合集(附链接)
目前,国外计算机界评价学术水平主要是看在顶级学术会议上发表的论文,特别是在机器学习.计算机视觉和人工智能领域,顶级会议才是王道.本期我们盘点了2019年人工智能领域的顶会,如最核心的顶会AAAI.IJ ...
- pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有周末日期(weekends day)
pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有周末日期(weekends day) #pandas使用bdate_range函数获取起始时间(st ...
- 图灵访谈系列之八:对话归隐的大师——Donald E. Knuth(高德纳)
计算机科学泰斗Donald E. Knuth(高德纳)归隐已近20载,不问世事,潜心修订并继续创作煌煌巨著<计算机程序设计艺术>(The Art of Computer Programmi ...
- 独家 | 年度盘点!必看AI顶会论文、Github高星项目大合集(附链接)
目前,国外计算机界评价学术水平主要是看在顶级学术会议上发表的论文,特别是在机器学习.计算机视觉和人工智能领域,顶级会议才是王道.本期我们盘点了2019年人工智能领域的顶会,如最核心的顶会AAAI.IJ ...
最新文章
- 多线程-多图下载综合案例-SDWebImage框架实现代码
- 代码下移快捷键_Intellij IDEA 快捷键大全
- struts2.3.12+hibernate4.3.11+spring4.2.2整合问题2java.lang.ClassNotFoundException: org.springframework.w
- vs2015 去除 git 源代码 绑定,改成向tfs添加源码管理
- 最好的方法,是为你们量身定制!
- SSM+solr 通过商品搜索学习solr的简单使用
- 字节跳动学前端还是java_【全国】—Java/前端工程师—字节跳动
- 检测用户浏览器是否支持cookie
- canvas绘制圆环
- python实现排序算法 整理
- 大学排行榜 : qs全球世界 大学排行榜
- Autodesk 3DSMax 2016 安装注册说明
- 求助,nodejs 在安装threads_a_gogo时报错
- Android性能优化第(七)篇---StrickMode严苛模式检测耗时与内存问题
- 【联想电脑升级网卡】BIOS 无线网卡白名单限制解决办法——不用刷BIOS,不用修改白名单,只需简单升级即可
- 学python可以从事什么工作,python是做什么的软件
- classpath、path、JAVA_HOME的作用及JAVA环境变量配置
- 数据库String字符串
- CentOS7.6安装weblogic14.1.1.0.0
- 100000以内的质数表
热门文章
- JavaFX项目jar使用javafxpackager生成exe
- oracle 查看表是否被锁
- SHELL-命令解释程序
- 测试php语句执行时间
- ubuntu+php+mysql+apache安装配置
- linux常用的命令行
- 新手也能立即上手,用Python90多行代码画出“樱花园”仙境(源码+注释)
- 非计算机专业想学习Python,有哪些问题需要注意?
- static string java_java:String类、static关键字、Arrays类、 Math类
- 一键移植工具_【产品推广】让UI设计畅通无阻 — 信息系统人机界面增强工具(HFE Designer)...