博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3648 Wedding(2-SAT+输出方案)
阅读量:4073 次
发布时间:2019-05-25

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

【题目链接】

【题目大意】

有n-1对夫妇被一对新郎新娘邀请来参加婚礼,他们要坐在一条长桌上,可以选择坐在左边或者右边。每对夫妻都不能坐在同一边,他们只能是面对面坐着。

但是这些人中有JQ,共有m对有JQ(新郎也可能有奸情,可怜的新娘...)。要求这些JQ对不能同时坐在新娘的对面。即,每一对JQ者,他们可以同时坐在和新娘同一边,也可以一个和新娘同一边而另一个在新娘对面即可。

要求找到一种方案并输出,如果没有方案输出bad luck

【思路】

对于每一对夫妇,有两种选择,要么女方和新娘同一边,要么男方和新娘坐在同一边。

然后是根据JQ关系加边。

【代码】

#include
#include
#include
#include
#include
#define WHITE -1#define RED 1#define BLUE 0using namespace std;typedef long long int64;const int MAXN = 50;const int VN = MAXN*2;const int EN = VN*VN;int n, m;struct Edge{ int u, v, next; };struct Graph{ int size, head[VN]; Edge E[EN]; void init(){size=0; memset(head, -1, sizeof(head));}; void addEdge(int u, int v){ E[size].u = u; E[size].v = v; E[size].next = head[u]; head[u] = size++; }}g, g1;class Two_Sat{public: bool check(const Graph&g, const int n){ scc(g, 2*n); for(int i=0; i
que; memset(color, WHITE, sizeof(color)); for(int i=1; i<=bcnt; ++i) if(!indeg[i]) que.push(i); while(!que.empty()){ int u = que.front(); que.pop(); if(color[u] != WHITE) continue; color[u] = RED; color[opp[u]] = BLUE; for(int e=g1.head[u]; e!=-1; e=g1.E[e].next){ int v = g1.E[e].v; if(--indeg[v] == 0){ que.push(v); } } } // 输出方案 printf("1%c",color[belong[1]]==RED?'w':'h'); for(int i=2; i

转载地址:http://jpzni.baihongyu.com/

你可能感兴趣的文章
liunx立即关机命令是什么?
查看>>
Win7输入法消失和不能切换的办法了
查看>>
Unity火爆插件Behavior Designer行为树插件学习
查看>>
Socket服务器整体架构概述
查看>>
有了WCF,Socket是否已人老珠黄?
查看>>
浅析 c# Queue
查看>>
c# 温故而知新: 线程篇(一)
查看>>
Python Twisted 框架中 socket通信
查看>>
TCPIP高效编程-改善网络程序的44个技巧[PDF]
查看>>
Socket经验记录
查看>>
SOCKET是多线程安全的吗? [问题点数:40分,结帖人CSDN]
查看>>
<base href=""/> 的应用
查看>>
是否可以在不同线程中不加任何同步的往某个 socket 上写?
查看>>
线程已被中止- “Thread was being aborted”
查看>>
AS3.0 正则表达式规则
查看>>
更新Svn客户端后,右键菜单中没有TortoiseSVN了
查看>>
Flash剪贴板功能
查看>>
FlashInspector 【Firefox浏览器插件,flash分析工具】
查看>>
xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题
查看>>
十个Flex/Air疑难杂症及解决方案简略
查看>>