一、题目

点此看题

二、解法

如果在开始时进行婚礼,那么就定义它为真,否则它为假。

如果两个人在开始时冲突,那么至少一个人需要选择在结束时,也就是x′∨y′x'\vee y'x′∨y′,其他情况类推

然后2-sat\text{2-sat}2-sat,时间主要是建图,时间复杂度O(n2)O(n^2)O(n2),坑点就是时间相等时是合法的。

#include <cstdio>
#include <iostream>
#include <stack>
using namespace std;
const int M = 2005;
int read()
{int num=0,flag=1;char c;while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;while(c>='0'&&c<='9')num=(num<<3)+(num<<1)+(c^48),c=getchar();return num*flag;
}
int n,m,tot,Index,cnt,s[M],t[M],d[M];
int f[M],dfn[M],low[M],in[M],col[M];
stack<int> st;
struct edge
{int v,next;
}e[M*M];
void add(int u,int v)
{e[++tot]=edge{v,f[u]},f[u]=tot;
}
void tarjan(int u)
{in[u]=1;st.push(u);dfn[u]=low[u]=++Index;for(int i=f[u];i;i=e[i].next){int v=e[i].v;if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);else if(in[v])low[u]=min(low[u],dfn[v]);}if(low[u]==dfn[u]){int v=0;cnt++;do{v=st.top();st.pop();in[v]=0;col[v]=cnt;}while(v!=u);}
}
int check(int l1,int r1,int l2,int r2)
{return !(l1>=r2 || l2>=r1);
}
void work(int i,int j,int va,int vb)
{add(i+n*(va&1),j+n*(vb^1));add(j+n*(vb&1),i+n*(va^1));
}
signed main()
{n=read();for(int i=1;i<=n;i++){int w,x,y,z;scanf("%d:%d %d:%d %d",&w,&x,&y,&z,&d[i]);s[i]=60*w+x;t[i]=60*y+z;}for(int i=1;i<=n;i++)for(int j=1;j<i;j++){int va=0,vb=0;if(check(s[i],s[i]+d[i],s[j],s[j]+d[j]))work(i,j,0,0);if(check(s[i],s[i]+d[i],t[j]-d[j],t[j]))work(i,j,0,1);if(check(t[i]-d[i],t[i],s[j],s[j]+d[j]))work(i,j,1,0);if(check(t[i]-d[i],t[i],t[j]-d[j],t[j]))work(i,j,1,1);}for(int i=1;i<=2*n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)if(col[i]==col[i+n]){puts("NO");return 0;}puts("YES");for(int i=1;i<=n;i++){if(col[i]<col[i+n]){int h1=s[i]/60,r1=s[i]%60;s[i]+=d[i];int h2=s[i]/60,r2=s[i]%60;printf("%02d:%02d %02d:%02d\n",h1,r1,h2,r2);}else{int h1=t[i]/60,r1=t[i]%60;t[i]-=d[i];int h2=t[i]/60,r2=t[i]%60;printf("%02d:%02d %02d:%02d\n",h2,r2,h1,r1);}}
}

[POJ 3683]Priest Johns Busiest Day相关推荐

  1. [题解]POJ 3683 Priest John's Busiest Day

    [Description] John is the only priest in his town. September 1st is the John's busiest day in a year ...

  2. POJ 3683 Priest John's Busiest Day(2-ST)

    题目链接:http://poj.org/problem?id=3683 题意:有n个婚礼要举行,但是只有一个牧师.第i个婚礼使用牧师的时间长为leni,可以在开始时或结束时使用.问能否使得n个婚礼均举 ...

  3. POJ - 3683 Priest John's Busiest Day(2-SAT+路径打印)

    题目链接:点击查看 题目大意:现在有n对新人要结婚,每一场婚礼都要请牧师主持一个特殊的仪式,这个仪式必须在婚礼的前d分钟或者最后d分钟进行,现在问能否有一种安排,能让牧师参加到每一场婚礼去主持仪式,输 ...

  4. POJ 3683 Priest John's Busiest Day (算竞进阶习题)

    2-SAT 可以把每一次仪式看成变量,0/1的取值分别为开头举行和结尾举行. 转换为2-SAT接受的命题,就是看某一次仪式中有没有重合的时间段,有的话,就按照不冲突的形式连有向边. 然后跑tarjan ...

  5. POJ 3683 Priest John's Busiest Day

    2-SAT简单题,判断一下两个开区间是否相交 #include<cstdio> #include<cstring> #include<cmath> #include ...

  6. pku 3683 Priest John's Busiest Day 2-sat判断有误解+输出可行解

    http://poj.org/problem?id=3683 题意: 一个教父,在一天中要给n对新婚夫妇举行婚礼.已知每对夫妇举行婚礼的起始时间Si和终止时间Ti ,教父送祝福的时间要么在Si-> ...

  7. POJ 3683 【2-sat+求一组可行解】.cpp

    题意: 有一个牧师要给好几对新婚夫妇准备婚礼.. 已知每对新婚夫妇的有空的时间以及婚礼持续时间.. 问是否可以让每对新婚夫妇都得到该牧师的祝福~ 如果可以就输出YES以及可行解 不可以就输出NO 输入 ...

  8. [2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421

    文章目录 Priest John's Busiest Day code Peaceful Commission code Let's go home code Bomb Game code Elimi ...

  9. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  10. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

最新文章

  1. ASP.NET MVC动作过滤器
  2. 顺序表-给定的顺序表L中删除元素值在x到y(x<=y)之间的所有的元素
  3. 这篇文章说出了研究生和导师的相处真谛……
  4. 听歌识曲原理探究以及样例代码
  5. matlab四节点矩形单元的应变,四节点矩形单元有限元解读.ppt
  6. 1000 qps java,什么是QPS?
  7. php.exe php-cgi.exe php-win.exe的区别
  8. Filter 字符编码Filter 一
  9. Linux运维实战之DNS的高级配置(转发器、视图等)
  10. 联级阴影贴图CSM(Cascaded shadow map)原理与实现
  11. jquery easyui 多选下拉框的实现
  12. 2018批量打印开关_从阿迪达斯到国产品牌,感受3D打印技术掀起的运动鞋中底革命...
  13. linux 网络io 监控,Linux教程:Linux性能监控-NetworkIO
  14. nc数据处理,掩膜,经纬度定位格点
  15. java人民币大写_JAVA 数字转人民币大写
  16. 乔布斯2005的演讲
  17. console口设置登录密码
  18. [战略]对空间_日志风格_日志分类_日志标记_的整体说明
  19. vue 实现上拉加载下拉刷新(思路贼清晰)
  20. 点击添加Class active属性

热门文章

  1. html相册滑动手风琴效果实现,JS实现图片手风琴效果
  2. 计算机网络【奈氏准则和香农定理】
  3. 应该用BPM管理业务规则吗?
  4. windows 10 笔记本无法连接无线网,显示已关闭
  5. 遥控器,未来世界的入口?
  6. 拓嘉启远:怎样做拼多多推广见效是比较快的
  7. Java 编程技术大全(上)实战练习 cp1-cp3
  8. ORB-SLAM Spanning Tree 的作用
  9. 强大的 Stream 函数式编程
  10. eclipse安装教程_eclipse安装教程jdk