poj 3683(2-sat+输出一组可行解)】的更多相关文章

题目链接:http://poj.org/problem?id=3683 思路:对于每个结婚仪式,只有在开始或结束时进行这两种选择,我们可以定义xi为真当且仅当在开始时进行.于是我们可以通过时间先后确定矛盾关系,然后通过矛盾关系建图.至于输出一组可行解,就可以2次dfs(一次沿正向边,一次沿反向边)求出拓扑序,然后根据拓扑序输出可行解. http://paste.ubuntu.com/5983686/…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27115 思路:有一个trick要注意:当情况为 2 x y 时,可以推出当y留下时,x也必须留下.然后就是后面的k个限制关系,我们可以3^(k)次方枚举,一旦找到符合条件的就return .然后就是反向建图,拓扑排序找可行解. #include<iostream> #include<cstdio> #include<cstring> #i…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26961 思路:u表示留下,~u表示离开,同理v,对于+u,-v,我们可以这样来定义:若u离开,则v必须留下,如v离开,则u必须留下,于是我们可以连边u+n->v,v+n->u,后面的同理. #include<iostream> #include<cstdio> #include<cstring> #include<alg…
/* 2sat问题 输出任意一组可行解 */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<queue> #include<vector> using namespace std; #define N 2100 struct node { int u,v,next; }ff[N],bian[N*N*8]; int…
题目地址:POJ 3683 第一次做须要输出可行解的题目. . .大体思路是先用强连通来推断是否有可行解,然后用逆序建图.用拓扑排序来进行染色.然后输出可行解. 详细思路见传送门 由于推断的时候少写了一个等号..检查了好长时间..sad... 代码例如以下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h>…
Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10010   Accepted: 3425   Special Judge Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old l…
POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 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 because there is an old legend in the town that the couple w…
Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6900   Accepted: 2363   Special Judge Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old le…
题意:有n对新人要在同一天结婚.结婚时间为Ti到Di,这里有时长为Si的一个仪式需要神父出席.神父可以在Ti-(Ti+Si)这段时间出席也可以在(Di-Si)-Si这段时间.问神父能否出席所有仪式,如果可以输出一组时间安排. 思路:2-SAT.神父可以在开始出席也可以在结束时候出席,要求与其他出席时间没有冲突,这样建图计算即可.另一一定要弄清楚true和false代表的含义. #include <cstdio> #include <cmath> #include <vecto…
就是棋盘问题输出一组解 https://blog.csdn.net/llx523113241/article/details/47759745 http://www.matrix67.com/blog/archives/116 求最小覆盖的步骤大致如下:1)在右边找到一个未被匹配过的点,标记.2)走一条没被匹配过的边,到左边的点,标记.3)走一条匹配过的边到右边,标记.4)重复2,3步骤直到不能再走.5)回到步骤一,直到找不到未被匹配且未被标记的右边的点.6)标记结束后,右边没有标记的点,和左边…
记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0<=>(x=>x′)AND(y=>y′) xORy=1<=>(x′=>y)AND(y′=>x) xXORy=0<=>(x′=>y′)AND(x=>y)AND(y=>x)AND(y′=>x′) xXORy=1<=>(x=…
Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8170   Accepted: 2784   Special Judge Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old le…
Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old legend in the town that the couple who get married on that day will be forever blessed by the God of Love. This year N couples…
发现建图的方法各有不同,前面一题连边和这一题连边建图的点就不同,感觉这题的建图方案更好. 题意:给出每个婚礼的2个主持时间,每个婚礼的可能能会冲突,输出方案. 思路:n个婚礼,2*n个点,每组点是对称的,用O(n2)的方法判断每个点之间的关系来建图,然后通过拓扑排序输出即可. 代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MAXN 2002 i…
题意:一个小镇里面只有一个牧师,现在有些新人要结婚,需要牧师分别去主持一个仪式,给出每对新人婚礼的开始时间 s 和结束时间 t ,还有他们俩的这个仪式需要的时间(每对新人需要的时间长短可能不同) d ,牧师可以在婚礼开始的时间 d 内(s 到 s+d)或者是结束前的时间 d 内(t - d 到 t)完成这个仪式.现在问能否给出一种安排,让牧师能完成所有夫妇婚礼的仪式,如果可以,输出一种安排. #include <iostream> #include <cstdio> #includ…
传送门:Problem 3683 https://www.cnblogs.com/violet-acmer/p/9769406.html 参考资料: [1]:挑战程序设计竞赛 题意: 有n场婚礼,每场婚礼有起始时间si,结束时间ti,还有一个主持仪式需要花费ti时间,ti必须安排在婚礼的开始或者结束. 主持由神父来做,但是只有一个神父,所以各个婚礼的主持时间不能重复,不过神父可以在出席完一个主持仪式后,立刻出席另一个开始时间与其结束时间相等的主持仪式,问你有没有可能正常的安排主持时间,不能输出n…
题意:有N场婚礼,每场婚礼的开始时间为Si,结束时间为Ti,每场婚礼有个仪式,历时Di,这个仪式要么在Si时刻开始,要么在Ti-Di时刻开始,问能否安排每场婚礼举行仪式的时间,使主持人John能参加所有的这些仪式的全过程. 题目链接:http://poj.org/problem?id=3683 ——>>每场婚礼的仪式,要么在开始段举行,要么在结束段举行,且一定要举行,要求各场婚礼仪式没冲突——>>2-SAT... 2-SAT挺神,针对此类问题,可谓手到擒来... LJ<训练指…
Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11127   Accepted: 3785   Special Judge Description John is the only priest in his town. September 1st is the John's busiest day in a year because there is an old l…
题目大意 题目不需要大意,poj居然还有中文题 鸣谢 特别鸣谢ljc大佬提供的方法!!! 解法 我们可能输出个最短路径的长度比较简单,但是输出最短路径真的是没有做过,这里有一种简单的方法 因为我们的dfs是把所有的情况都遍历了一遍,那么是不是我们的答案的路径就在这其中呢? 这样我们在判断条件的时候把老生常谈的那些什么路径数记录的变成如果sum<minn更新minn,然后记录这些路径 回溯的时候,这里dfs用了三个参数x,y,cur.把cur回溯顺便就回溯了路径 代码(为啥没有高亮...) #in…
题意: 一些人要在同一天进行婚礼,但是牧师只有1个,每一对夫妻都有一个时间范围[s , e]可供牧师选择,且起码要m分钟才主持完毕,但是要么就在 s 就开始,要么就主持到刚好 e 结束.因为人数太多了,这些时间可能会重叠,可能还会完全包含,可能还没有交叉,各种情况.问牧师能否主持完全部人的婚礼,若可以,给出每对夫妻占用牧师的一个时间段(记得按所给的夫妻的顺序哦). 主要步骤如下. (1)先建原图,不管是否会冲突. (2)找强连通分量来缩点,如果会冲突,这个时候应该发现. (3)建个缩点后,原图的…
/*第二题*/ #include<stdio.h> //输入186732468 //输出173 //输入12345677 //输出13577 main(){ ;//输入的数字,数字的长度 printf("请输入:\n"); //input=186732468; scanf("%d",&input); ;tmp=input;//缓存一下原始数据 ){ printf(); }else{ while(input){ input=input/; leng…
题意: 就是给出几个单词 看能否组成欧拉回路或路径  当然还是让输出组成的最小字典序的路 解析: 还是把首尾字母看成点   把单词看成边 记录边就好了 这题让我对fleury输出最小字典序又加深了一些认识 fleury输出最小字典序  就必须保证对应输出的边或点  按从小到大的顺序去走 所以我们先保存  然后排序  然后从大到小加边 因为我们用的是邻接表  邻接表是从当前起点u的最后一个加入的边 开始的 ..所以我们要对应起来 把边从大到小依次加入 #include <iostream> #i…
题意:有N-1对夫妇和1对新郎新娘要出席婚礼,这N对人要坐在走廊两侧.要求每对夫妇要坐在不同侧.有M对人有通奸关系,对于这一对人,不能同时坐在新娘对面(新娘新郎也可能和别人有通奸关系).求如何避免冲突安排每对人. 分析:相当于选择N个坐在新娘对面且不会冲突的人.根据给定的M条关系建图,若a与b有关系,则选a坐对面则必定选b的伴侣坐对面:且选b坐对面则必定选a的伴侣坐对面.最后要加一条(0,1)的有向边(保证新郎一定会被选到另一侧). 建图后跑Tarjan,若有一对夫妻处在强连通分量中,则无解:否…
tarjan缩点,拓扑排序染色输出(貌似挑战上面没有拓扑啊,而且这样写还过了= =) 主要是找s,t,d,三者之间的关系,找出合取范式这题就很容易了 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #inc…
题目链接:http://poj.org/problem?id=3436 大力套kuangbin板过了orz #include<cstdio> #include<cstring> using namespace std; ; ; const int INF = 0x3f3f3f3f; struct Edge { int to,next,cap,flow; } edge[MAXM]; int tol; int head[MAXN]; int gap[MAXN],dep[MAXN],pr…
看这个题目之前可以先看POJ2186复习一下强联通分量的分解 题意:给出N个开始时间和结束时间和持续时间三元组,持续时间可以在开始后或者结束前,问如何分配可以没有冲突. -----–我是分割线----------- 先解释一下合取范式(离散数学已经学过): 如果合取范式中的每个字句的文字个数不超过两个就称为2-SAT问题 一般性称为n-SAT问题 举个栗子:(a∨b)∧¬a" role="presentation" style="position: relative…
原题模型:两者(A,B)不能同时取 #include "cstdio" #include "vector" #include "stack" #include "cstring" using namespace std; #define maxn 2010 ; ]; int S[maxn],T[maxn],D[maxn],pre[maxn],sccno[maxn],lowlink[maxn],id[maxn],cfl[maxn…
暑期集训出的第一道一血 感觉自己萌萌哒…… 这道题本身并没有坑点 仅仅是翻译巨坑…… 解大腿在做B 安学长在做E 我闲着也没事 就一个词一个词翻译F…… 最后感觉…… 题干大多数都看不懂…… 也都没啥用…… 大概呢…… 就是给你n个点…… m条回路…… 问你哪条回路是最外面的…… 总之最后就是让你求哪个回路组成的图形面积最大…… 考点就是多边形面积公式…… 怕有误差就没加/2…… 好像加了也能过吧…… WA了两次 一次是选错点了 一次是第一个点和最后一个点顺序反了…… #include<stdi…
2-SAT简单题,判断一下两个开区间是否相交 #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<vector> #include<stack> #include<algorithm> using namespace std; +; int N,M; struct Time { int Start; int End; int…
题意: $n$对$couple$举行仪式,有两个时间段可以选择,问是否可以不冲突举行完,并求方案 两个时间段选择对应一真一假,对于有时间段冲突冲突的两人按照$2-SAT$的规则连边(把不冲突的时间段连起来) 然后本题需要构造解,所以要$SCC$缩点反向建图记录否定再拓扑排序$dfs$染色,好麻烦... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #…