2-SAT简单题,判断一下两个开区间是否相交

#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std; const int maxn=+;
int N,M;
struct Time
{
int Start;
int End;
int cost;
int S1,E1,S2,E2;
} t[maxn];
char s[]; struct TwoSAT
{
int n;
vector<int> G[maxn*];
bool mark[maxn*];
int S[maxn*],c; bool dfs(int x)
{
if(mark[x^]) return false;
if(mark[x]) return true;
mark[x]=true;
S[c++]=x;
for(int i=;i<G[x].size();i++)
if(!dfs(G[x][i])) return false;
return true;
} void init(int n)
{
this->n=n;
for(int i=;i<n*;i++) G[i].clear();
memset(mark,,sizeof mark);
} void add_clause(int x,int y)
{
G[x].push_back(y^);
G[y].push_back(x^);
} bool solve()
{
for(int i=;i<*n;i+=)
if(!mark[i]&&!mark[i+])
{
c=;
if(!dfs(i))
{
while(c>) mark[S[--c]]=false;
if(!dfs(i+)) return false;
}
}
return true;
}
}; bool F(int x1,int y1,int x2,int y2)
{
if(x1<x2&&x2<y1) return ;//区间相交
if(x1<y2&&y2<y1) return ;//区间相交
if(x2<x1&&x1<y2) return ;//区间相交
if(x2<y1&&y1<y2) return ;//区间相交
if(x1==x2||y1==y2) return ;//区间相交
return ;//区间不相交
} int main()
{
while(~scanf("%d",&N))
{
TwoSAT T; T.n=N; T.init(N);
for(int i=; i<N; i++)
{
int h1,h2,m1,m2,tt; scanf("%s",s);
h1=(s[]-'')*+(s[]-'');
m1=(s[]-'')*+(s[]-''); scanf("%s",s);
h2=(s[]-'')*+(s[]-'');
m2=(s[]-'')*+(s[]-''); scanf("%d",&tt); t[i].Start=h1*+m1;
t[i].End=h2*+m2;
t[i].cost=tt; t[i].S1=t[i].Start;
t[i].E1=t[i].Start+t[i].cost; t[i].S2=t[i].End-t[i].cost;
t[i].E2=t[i].End;
} for(int i=;i<N;i++)
{
for(int j=i+;j<N;j++)
{
if(F(t[i].S1,t[i].E1,t[j].S1,t[j].E1))
T.add_clause(*i,*j);
if(F(t[i].S1,t[i].E1,t[j].S2,t[j].E2))
T.add_clause(*i,*j+);
if(F(t[i].S2,t[i].E2,t[j].S1,t[j].E1))
T.add_clause(*i+,*j);
if(F(t[i].S2,t[i].E2,t[j].S2,t[j].E2))
T.add_clause(*i+,*j+);
}
}
if(T.solve())
{
printf("YES\n");
for(int i=;i<N;i++)
{
if(T.mark[*i]) printf("%02d:%02d %02d:%02d\n",t[i].S1/,t[i].S1%,t[i].E1/,t[i].E1%);
else printf("%02d:%02d %02d:%02d\n",t[i].S2/,t[i].S2%,t[i].E2/,t[i].E2%);
}
}
else printf("NO\n");
}
return ;
}

POJ 3683 Priest John's Busiest Day的更多相关文章

  1. POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day(2-sat问题)

    POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day(2-sat问题) Descripti ...

  2. POJ 3683 Priest John's Busiest Day(2-SAT+方案输出)

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10010   Accep ...

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

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6900   Accept ...

  4. POJ 3683 Priest John's Busiest Day(2-SAT 并输出解)

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

  5. poj - 3683 - Priest John's Busiest Day(2-SAT)

    题意:有N场婚礼,每场婚礼的开始时间为Si,结束时间为Ti,每场婚礼有个仪式,历时Di,这个仪式要么在Si时刻开始,要么在Ti-Di时刻开始,问能否安排每场婚礼举行仪式的时间,使主持人John能参加所 ...

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

    题意:有n对新人要在同一天结婚.结婚时间为Ti到Di,这里有时长为Si的一个仪式需要神父出席.神父可以在Ti-(Ti+Si)这段时间出席也可以在(Di-Si)-Si这段时间.问神父能否出席所有仪式,如 ...

  7. POJ 3683 Priest John's Busiest Day (2-SAT,常规)

    题意: 一些人要在同一天进行婚礼,但是牧师只有1个,每一对夫妻都有一个时间范围[s , e]可供牧师选择,且起码要m分钟才主持完毕,但是要么就在 s 就开始,要么就主持到刚好 e 结束.因为人数太多了 ...

  8. POJ 3683 Priest John's Busiest Day[2-SAT 构造解]

    题意: $n$对$couple$举行仪式,有两个时间段可以选择,问是否可以不冲突举行完,并求方案 两个时间段选择对应一真一假,对于有时间段冲突冲突的两人按照$2-SAT$的规则连边(把不冲突的时间段连 ...

  9. POJ 3683 Priest John's Busiest Day 【2-Sat】

    这是一道裸的2-Sat,只要考虑矛盾条件的判断就好了. 矛盾判断: 对于婚礼现场 x 和 y,x 的第一段可以和 y 的第一段或者第二段矛盾,同理,x 的第二段可以和 y 的第一段或者第二段矛盾,条件 ...

随机推荐

  1. Chapter 1 First Sight——30

    The girl sitting there giggled. I'd noticed that his eyes were black — coal black. 那个坐在那里的女孩笑着.我注意到她 ...

  2. JavaScript在智能手机上的应用-测试是否支持滑动事件

    ---------------------------- <script type="text/javascript">                        ...

  3. java返回json数据日期为一串数字字符串 js 转义

    var time = "2514484555"; //这只是事例,并不是实际的数据 function timeToString(time) { var datetime = new ...

  4. 初识beego

    beego是一个基于golang的web框架,这里记录些使用中碰到的东西. 输出: this.Ctx.Output.Write([]byte("test")) //这里是作为res ...

  5. 07-09 07:28:38.350: E/AndroidRuntime(1437): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.googleplay.ui.activity.MainActivity" on path: DexPathList[[zip file "/data/app/c

    一运行,加载mainActivity就报错 布局文件乱写一通,然后急着运行,报莫名其妙的错误: 07-09 07:28:38.350: E/AndroidRuntime(1437): Caused b ...

  6. 注意题目条件!!! 团问题 HDU 5952

    题目大意:团的定义就是,团内的所有点,两两之间各有一条边,团的大小就是点的个数.现给你一个n个点,m条边的图.问,该图中有多少点的个数为s的团. (题目保证每个点的度数不超过20,n<=100, ...

  7. 关于web.xml的格式

    先是filter  再是<filter-mapping> 然后<servlet> 再是<servlet-mapping> 这是一种规范基于j2ee 在开发的过程中一 ...

  8. 多线程进阶之并发工具类:CountDownLatch、CyclicBarrier

    并发工具类在java.util.concurrent包下.常用的有CountDownLatch.CyclicBarrier,用它们可以控制并发流程. 1.CountDownLatch探究: 主要用到其 ...

  9. Swift中的闭包(Closure) 浅析

    转载自:http://www.devtalking.com/articles/closure-expressions-in-swift/ 闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储 ...

  10. NSUserDefault -- synchronize 浅析

    NSUserDefault的使用比较简单:NSUserDefaults *mySettingData = [NSUserDefaults standardUserDefaults];  创建NSUse ...