POJ-3648 Wedding 2sat】的更多相关文章

题意:新郎和新娘结婚,来了n-1对夫妻,这些夫妻包括新郎之间有通奸关系(包括男女,男男,女女),我们的目地是为了满足新娘,新娘对面不能坐着一对夫妻,也不能坐着有任何通奸关系的人,另外新郎一定要坐新娘对面.但是输出时输出坐在新娘这一边的人(不需要输出新娘). 分析: 问题只是要求不能 “通奸对” 不能同时出现在新娘对面(即新郎那边),这个必须考虑到2*n个人的座位问题.一开始以为只考虑女的怎么坐就行了,男肯定坐对面,但是后来想这样子只能保证两边都没有通奸对出现,不符合题意,有些数据过不了. 考虑数…
题目链接 题意看这吧..https://www.cnblogs.com/wenruo/p/5885948.html \(Solution\) 每对夫妇只能有一个坐在新娘这一边,这正符合2-SAT初始状态 若以0表示新娘,以1表示新郎 那么对于有关系的u,v(i'表示在新娘一侧),应该连边u->v',v->u',而不是用i'表示新娘对面(新郎一侧),而连边u'->v,v'->u 因为如果新郎与v有关系,就会连边1(u')->v',这成了同在新郎一侧了:但若新娘与v有关系,连边0…
Description Up to thirty couples will attend a wedding feast, at which they will be seated on either side of a long table. The bride and groom sit at one end, opposite each other, and the bride wears an elaborate headdress that keeps her from seeing…
题意:有N-1对夫妇和1对新郎新娘要出席婚礼,这N对人要坐在走廊两侧.要求每对夫妇要坐在不同侧.有M对人有通奸关系,对于这一对人,不能同时坐在新娘对面(新娘新郎也可能和别人有通奸关系).求如何避免冲突安排每对人. 分析:相当于选择N个坐在新娘对面且不会冲突的人.根据给定的M条关系建图,若a与b有关系,则选a坐对面则必定选b的伴侣坐对面:且选b坐对面则必定选a的伴侣坐对面.最后要加一条(0,1)的有向边(保证新郎一定会被选到另一侧). 建图后跑Tarjan,若有一对夫妻处在强连通分量中,则无解:否…
Wedding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10427   Accepted: 3170   Special Judge Description Up to thirty couples will attend a wedding feast, at which they will be seated on either side of a long table. The bride and groom…
看错题*n,注意是输出新娘这边的-- 按2-SAT规则连互斥的边,然后注意连一条(1,1+n)表示新娘必选 然后输出color[belong[i]]==color[belong[1+n(新娘)]]的点即可 #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<queue> using namespace std; const int N=10…
2-SAT,直接选择新娘一侧的比较难做,所以处理的时候选择新郎一侧的,最后反着输出就可以. A和B通奸的话,就建边 A->B'以及B->A’,表示 A在新郎一侧的话,B一定不在:B在新郎一侧的话,A一定不在. 然后再把新郎的mark标记为1,表示新郎一定选择. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm>…
Language: Default Wedding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9004   Accepted: 2722   Special Judge Description Up to thirty couples will attend a wedding feast, at which they will be seated on either side of a long table. Th…
http://poj.org/problem?id=3648 题意:n对人(编号0-n-1,'w'表示第一个人,'h'表示第二个人),每对两个,人坐在桌子两侧.满足:1.每对人中的两个人不能坐在同一侧.2.m对关系x和y,表示x和y不能坐在同一侧,但是能坐在第0对的第一个人的那一侧.问第0对的第一个人那一侧坐着的人. #include <cstdio> #include <cstring> #include <algorithm> #include <cmath&…
思路:将每对夫妻看成是对立状态,每个不正常关系都是一个矛盾,按2-SAT的方式建边.最后建一条新娘到新郎的边.具体看注释 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #define Maxn 62 #define Maxm Maxn*Maxn using namespace std; int vi[Maxn],h…
其实2-SAT类型题目的类型比较明确,基本模型差不多是对于n组对称的点,通过给出的限制条件建图连边,然后通过缩点和判断冲突来解决问题.要注意的是在topsort输出结果的时候,缩点后建图需要反向连边,然后输出就可以了.2-sat题型差不多. 题意:新娘新郎分别坐在长桌两边,n-1队夫妇来参加婚礼,要求:夫妇不能坐在同一边,通奸关系不能坐在同一边.输出新娘对面的序列. 思路:对称关系:夫妇,限制条件:通奸关系.基础2-sat问题,缩点找冲突topsort输出结果一气呵成... 代码: #inclu…
转载地址:http://blog.csdn.net/qq172108805/article/details/7603351 /* 2-sat问题,题意:有对情侣结婚,请来n-1对夫妇,算上他们自己共n对,编号为0~~n-1,他们自己编号为0 所有人坐在桌子两旁,新娘不想看到对面的人有夫妻关系或偷奸关系,若有解,输出一组解,无解输出bad luck 思路: 1.根据偷奸关系建图(1h和2h有偷奸关系,建边1h->2w 2h->1w) 2.求强连通分量 3.判断有无解(任一对夫妇不在同一强连通分量…
题目大意: 有一对新人结婚,邀请n对夫妇去参加婚礼. 有一张很长的桌子,人只能坐在桌子的两边,还要满 足下面的要求:1.每对夫妇不能坐在同一侧 2.n对夫妇 之中可能有通奸关系(包括男男,男女,女女),有通 奸关系的不能同时坐在新娘的对面,可以分开坐,可以 同时坐在新娘这一侧.如果存在一种可行的方案,输出 与新娘同侧的人. 这里因为输入的是字符串,要注意的是数字可能不只是一个个位数,要 while(isdigit(s1[index1])) i = i*10+(s1[index1++]-'0');…
题目链接:http://poj.org/problem?id=3648‘ 题意:一对情人举行婚礼,有n对夫妇参加,别人对着坐在一个长桌子的两边,新娘和新郎坐在最后面,新娘只能看见坐在他对面的人.现在,n对夫妇中有两两通奸了,新娘不希望看到这种情况,先给出通奸的人,求是否存在可行的排位方法. 有两种建立2sat模型的方法,第一种是对每个人的坐的方向来建立,0和1分别表示坐在左边和右边.但是可以不考虑坐方向,只考虑他们能不能坐在同一边,需要考虑新郎的一边,因为新娘那边得不出限制条件. //STATU…
这道题是我对于2-SAT问题的入门题:http://poj.org/problem?id=3207 一篇非常非常非常好的博客,很详细,认真看一遍差不多可以了解个大概:https://blog.csdn.net/JarjingX/article/details/8521690 总结一下我对于 2-SAT 问题的初步见解: 有很多个集合,每个集合里面有若干元素,现给出一些取元素的规则,要你判断是否可行,可行则给出一个可行方案.如果所有集合中,元素个数最多的集合有k个,那么我们就说这是一个k-sat问…
题目大意: 给定n个点,给每个点都安排一个相同的正方形,使这个点落在正方形的下底边的中间或者上底边的中间,并让这n个正方形不出现相互覆盖,可以共享同一条边,求 这个正方形最大的边长 这里明显看出n个点,每个点都只有在上底边和下底边两种选择,所以这里是2-sat解决 这里全都是整数,而因为点在正方形的中间,所以/2后会有小数 我这里初始将所有点都扩大两倍,那么答案必然扩大两倍,所以我们二分只考虑边长为偶数的情况即可,这样计算结果就不会出现小数了 最后将答案除以2便是 #include <cstdi…
题面很邪恶啊... 一对新人请n-1对夫妻吃饭,人们坐在一张桌子的两侧,每一对互为夫妻关系的人必须坐在桌子的两侧.而且有些人两两之间会存在“通奸”关系,通奸关系不仅在男女之间,同性之间也有.新娘对面不可以座有通奸关系的人.判断是否存在可行的排座方案,存在的话输出和新娘同一排的人. 因为新娘对面不可以做有通奸关系的人,也就是说2sat求出的一组可行解是新娘对面的. 如果u和v有通奸关系,就连边u->v',v->u'. 有一点需要注意,就是要连一条边0->1 这样如果选了0就必须选1,那么就…
题意:给出n对钥匙,每对钥匙只能选其中一个,在给出每层门需要的两个钥匙,只要一个钥匙就能开门,问最多能到哪层. 思路:了解了2-SAT判定的问题之后主要就是建图的问题了,这里建图就是对于2*n个钥匙,分别分成a和a'两组,即选了比如a,b一组钥匙,选择了a则必须选择b',那么进行连边,而对于每层门,若该门能开,且选择了a',则b肯定需要选,那么a'和b连边.最后就是判定了,同样的 若a与a'在同一个连通分量中,表示无解.这题需要利用二分枚举答案m. 代码: #include<iostream>…
Language: Default Map Labeler Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1815   Accepted: 599 Description Map generation is a difficult task in cartography. A vital part of such task is automatic labeling of the cities in a map; whe…
Language: Default Get Luffy Out Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7969   Accepted: 3061 Description Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by Pirate Arlong. Ratish set o…
传送门:Problem 3678 https://www.cnblogs.com/violet-acmer/p/9769406.html 难点: 题意理解+构图 题意: 有n个点 v[0,2......,n-1](v[i]值为0或1),边(a[i],b[i])间的权值为c[i],现在给出它们之间的一些逻辑运算的结果(比如c[1]=a[1] & b[1] = 1),逻辑运算有AND OR XOR三种,问是否存在一种满足所有条件的取值方案. 构图难点: 如果类似 u v 1 AND这样的数据,说明u…
线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当前区间已经更新了.其主要使用了Lazy思想. Lazy思想:lazy-tag思想,记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率.在此通俗的解释Lazy(t偷懒)的意思,比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n…
Code: #include<cstdio> #include<algorithm> #include<vector> using namespace std; const int maxn=3000; int c=0; int mark[maxn],S[maxn],from[maxn],to[maxn]; vector<int>G[maxn]; void add_edge(int x,int y){ x=(x*2)+1,y=(y*2)+1; G[x-1].…
可以把一对夫妇当成一个节点,然后拆点的话,h和w分别为真和假,然后直接按照题目中说的建图染色即可 #include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <queue> #include <algorithm> using namespace std; const int maxn = 100; const int maxm…
2-sat总结 2-sat问题,一般表现的形式为.每一个点有两种方式a,b,要么选a,要么选b.而且点点之间有一些约束关系.比如:u和v至少一个选a.那么这就是一个表达式.把a当成真,b当成假,那就是u真或v真.2-sat的题目就是这样.给定这些约束,推断是否会矛盾 注意表达式的转化形式,(事实上就是离散数学中那几种转换方式) 比方(u真且v真)或(u假且v假)就能够转化成(u真或v假)且(u假或v真),这样就能建立关系 2-sat中的原理,事实上和2染色是一样的,把每一个结点拆分成一个真结点和…
强连通分量的应用,详见<挑战程序设计>P324 例题1:HDU Peaceful Commission 思路:强连通分量分解,看有没有两个同一个国家的代表在一个强连通分量里,如果有,就是NIE.这个不是关键,关键是怎么输出,输出还要用一下dfs,把所有能到达的点标记一下,顺便判断一下和之前有没有矛盾,有矛盾的话所有被标记的点又要重新标记回去.其实这道题可以不用强连通分量分解,直接dfs. 代码1(强连通分量分解+dfs): #include<bits/stdc++.h> using…
Get Luffy Out Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8851   Accepted: 3441 Description Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by Pirate Arlong. Ratish set off at once to Arlo…
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并查集======================================[HDU]1213   How Many Tables   基础并查集★1272   小希的迷宫   基础并查集★1325&&poj1308  Is It A Tree?   基础并查集★1856   More i…
转载增减: https://blog.csdn.net/qq_24451605/article/details/47126143 https://blog.csdn.net/u012915516/article/details/48442265 2 - SAT: 一个事物具有两面性,并且与其它事物存在约束关系 注意在建图的时候 不仅可以是在每次给出的两个间建边,还可以与其他的点建边 -------------------------------------------------对于2-sat问…
POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:http://poj.org/ 1062* 昂贵的聘礼 枚举等级限制+dijkstra 1087* A Plug for UNIX 2分匹配 1094 Sorting It All Out floyd 或 拓扑 1112* Team Them Up! 2分图染色+DP 1125 Stockbroker…