博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3683 Priest John's Busiest Day
阅读量:5335 次
发布时间:2019-06-15

本文共 2106 字,大约阅读时间需要 7 分钟。

输出方案的2-sat

直接比较两个点强联通分量的编号,缩完点的图应该是有向无环图,根据原始做法是反图topsort出解,编号小的说明顺序在后,选择这个点符合定义。

#include
#include
#include
#include
#include
#include
using namespace std;struct node{ int x,y,next;}a[8100000];int len,last[2100];void ins(int x,int y){ len++; a[len].x=x;a[len].y=y; a[len].next=last[x];last[x]=len;}int z,dfn[2100],low[2100];int top,sta[2100];bool v[2100];int cnt,bel[2100];void SCC(int x){ dfn[x]=low[x]=++z; sta[++top]=x;v[x]=true; for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(dfn[y]==0) { SCC(y); low[x]=min(low[x],low[y]); } else if(v[y]==true) low[x]=min(low[x],dfn[y]); } if(low[x]==dfn[x]) { int k;cnt++; do { k=sta[top];top--; v[k]=false; bel[k]=cnt; }while(k!=x); }}int n;char ss[10];struct point{ int st,ed;}p[2100];int sc(){ scanf("%s",ss+1);int slen=strlen(ss+1); int k1=0,k2=0,i=1; while(ss[i]!=':') k1=k1*10+ss[i]-'0',i++; i++;while(i<=slen)k2=k2*10+ss[i]-'0',i++; return k1*60+k2;}void pr(int g){ if(g/60<10)printf("0"); printf("%d",g/60); printf(":"); g%=60; if(g<10)printf("0"); printf("%d",g);}bool together(point p1,point p2){ if(p1.st>p2.st)swap(p1,p2); return p1.ed<=p2.st;}void conposition(){ bool b1,b2; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j) { b1=together(p[i],p[j]), b2=together(p[i],p[j+n]); if(!b1&&!b2)ins(i,i+n); else if(!b1)ins(i,j+n); else if(!b2)ins(i,j); b1=together(p[i+n],p[j]), b2=together(p[i+n],p[j+n]); if(!b1&&!b2)ins(i+n,i); else if(!b1)ins(i+n,j+n); else if(!b2)ins(i+n,j); }}int w[1100];int main(){ scanf("%d",&n); int st,ed,L; for(int i=1;i<=n;i++) { st=sc(),ed=sc(),scanf("%d",&L); p[i].st=st,p[i].ed=st+L; p[i+n].st=ed-L,p[i+n].ed=ed; } conposition(); z=top=cnt=0; for(int i=1;i<=2*n;i++) if(dfn[i]==0)SCC(i); for(int i=1;i<=n;i++) { if(bel[i]==bel[i+n]){printf("NO\n");return 0;} w[i]=bel[i]>bel[i+n]; } printf("YES\n"); for(int i=1;i<=n;i++) { if(w[i]==0) pr(p[i].st),printf(" "),pr(p[i].ed); else pr(p[i+n].st),printf(" "),pr(p[i+n].ed); printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/9540913.html

你可能感兴趣的文章
2018icpc徐州OnlineA Hard to prepare
查看>>
【转】redo与undo
查看>>
String类中的equals方法总结(转载)
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
管道,数据共享,进程池
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
把word文档中的所有图片导出
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
加固linux
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
构建自己的项目管理方案
查看>>