博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2723 Get Luffy Out(2-SAT + 二分)
阅读量:4073 次
发布时间:2019-05-25

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

【题目链接】

【题目大意】

有2*N把不同的锁,每把锁有一个钥匙,所以共有2*N 把钥匙。把2*N把钥匙两两配对共分为N组。

有个M层楼,每层楼有一个门,每个门上有两把锁,可能是相同的也可能是不同的。 走上某层楼之前,必须要打开这个门上的至少一个锁。

要你从每组钥匙中选择一把钥匙,然后用这些钥匙去上这栋楼,问最多能走到几层楼?

【思路】

对于每组钥匙,只能二取一,所以是2-SAT模型。

问题是怎样找矛盾对并加边呢?

对于一个门上的两把锁,如果这两把锁的钥匙是同一组的,那么任选一个钥匙都可以。

如果是属于不同组的,那么假设这两把钥匙是a1, b1,那么这两组分别是(a1, a2) (b1, b2),    a2和b2是一定不能同时选的,因为选了就没有a1或b1来打开这个门了

所以<a2,b2>是一个矛盾对,加入边a1->b2,  b2->a1

然后题目是要求最多能打开多少个门, 那么二分一下最大数量打开门就可以了。

【代码】

#include
#include
#include
#include
using namespace std;const int MAXN = 2100;const int VN = MAXN*2;const int EN = VN;int n, m;struct Edge{ int 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].v = v; E[size].next = head[u]; head[u] = size++; }}g;class Two_SAT{public: bool check(const Graph& g, const int n){ scc(g, 2*n); for(int i=0; i<2*n; i+=2) if(belong[i] == belong[i^1]) return false; return true; }private: void tarjan(const Graph& g, const int u){ int v; DFN[u] = low[u] = ++idx; sta[top++] = u; instack[u] = true; for(int e=g.head[u]; e!=-1; e=g.E[e].next){ v = g.E[e].v; if(DFN[v] == -1){ tarjan(g, v); low[u] = min(low[u], low[v]); }else if(instack[v]){ low[u] = min(low[u], DFN[v]); } } if(low[u] == DFN[u]){ ++bcnt; do{ v = sta[--top]; instack[v] = false; belong[v] = bcnt; }while(u != v); } } void scc(const Graph& g, const int n){ idx = bcnt = top = 0; memset(DFN, -1, sizeof(DFN)); memset(instack, 0, sizeof(instack)); for(int i=0; i
>1; // 建图 g.init(); for(int i=0; i

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

你可能感兴趣的文章
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>