HDU 1816, POJ 2723 Get Luffy Out

题目链接

题意:N串钥匙。每串2把,仅仅能选一把。然后有n个大门,每一个门有两个锁,开了一个就能通过,问选一些钥匙,最多能通过多少个门

思路:二分通过个数。然后对于钥匙建边至少一个不选,门建边至少一个选,然后2-sat搞一下就可以。
一開始是按每串钥匙为1个结点,但是后面发现数据有可能一把钥匙,出如今不同串(真是不合理),所以这个做法就跪了

代码:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;const int MAXNODE = 2105;struct TwoSet {int n;vector<int> g[MAXNODE * 2];bool mark[MAXNODE * 2];int S[MAXNODE * 2], sn;void init(int tot) {n = tot * 2;for (int i = 0; i < n; i += 2) {g[i].clear();g[i^1].clear();}memset(mark, false, sizeof(mark));}void add_Edge(int u, int uval, int v, int vval) {u = u * 2 + uval;v = v * 2 + vval;g[u^1].push_back(v);g[v^1].push_back(u);}void delete_Edge(int u, int uval, int v, int vval) {u = u * 2 + uval;v = v * 2 + vval;g[u^1].pop_back();g[v^1].pop_back();}bool dfs(int u) {if (mark[u^1]) return false;if (mark[u]) return true;mark[u] = true;S[sn++] = u;for (int i = 0; i < g[u].size(); i++) {int v = g[u][i];if (!dfs(v)) return false;}return true;}bool solve() {for (int i = 0; i < n; i += 2) {if (!mark[i] && !mark[i + 1]) {sn = 0;if (!dfs(i)){for (int j = 0; j < sn; j++)mark[S[j]] = false;sn = 0;if (!dfs(i + 1)) return false;}}}return true;}
} gao;const int N = 2055;int n, m;
int x[N], y[N];
int k1[N], k2[N];bool judge(int d) {gao.init(2 * n);for (int i = 0; i < n; i++)gao.add_Edge(x[i], 0, y[i], 0);for (int i = 1; i <= d; i++)gao.add_Edge(k1[i], 1, k2[i], 1);return gao.solve();
}int main() {while (~scanf("%d%d", &n, &m) && n) {for (int i = 0; i < n; i++)scanf("%d%d", &x[i], &y[i]);for (int i = 1; i <= m; i++)scanf("%d%d", &k1[i], &k2[i]);int l = 0, r = m + 1;while (l < r) {int mid = (l + r) / 2;if (judge(mid)) l = mid + 1;else r = mid;}printf("%d\n", l - 1);}return 0;
}

HDU 1816, POJ 2723 Get Luffy Out(2-sat)相关推荐

  1. ACM POJ 2723 Get Luffy Out(2-SAT入门)

    题目链接:http://poj.org/problem?id=2723 [题目大意] 有2n把钥匙,分成2组,给你每组的钥匙信息,并且每组的钥匙只能用一个. 有m个门,每个门有2个锁,只要打开一个锁这 ...

  2. HDU 1815, POJ 2749 Building roads(2-sat)

    HDU 1815, POJ 2749 Building roads 题目链接HDU 题目链接POJ 题意: 有n个牛棚, 还有两个中转站S1和S2, S1和S2用一条路连接起来. 为了使得随意牛棚两个 ...

  3. POJ 2723 Get Luffy Out【二分+2-sat】

    题意:已知有 2*n把钥匙,这些钥匙两两一组,每组只能用其中的一把钥匙,有 m 个门,每个门上有两把锁,只要有一把锁被打开门就可以被打开, 一个门上可能是两把相同的锁,不同的门上也有可能有相同的锁,给 ...

  4. hdu 1043 ,pku 1077 Eight ,八数码问题

    某位神牛曾说过,此题是涉及到人生完不完整的一道题.. Goodness大牛曾总结了 八数码的八重境界 : http://www.cnblogs.com/goodness/archive/2010/05 ...

  5. 【POJ - 3352】Road Construction(Tarjan,边双连通分量)

    题干: It's almost summer time, and that means that it's almost summer construction time! This year, th ...

  6. 块状链表(附NOI 2003 Editor,POJ 2131 Key Insertion)

    这两天学习了一下块状链表,也谈不上学习,可以说是练习.因为块状链表这种东西,猛一听起来好像很高端,但是拆开来说就是:分块+链表.根本上就是暴力,就是分块.只不过"分"的对象从数组变 ...

  7. 【POJ - 2392】Space Elevator (dp,优秀的背包问题)

    题干: The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a ...

  8. 【POJ - 1556】The Doors (计算几何,线段相交)

    题干: You are to find the length of the shortest path through a chamber containing obstructing walls. ...

  9. 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )

    题干: Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= R <= 5 ...

最新文章

  1. SDNU 1209.磊磊的随机数
  2. C语言typedefine 和define的区别
  3. 从未在一起更让人遗憾_二十不惑强行悲伤结尾,我们本可以在一起,才最让人遗憾...
  4. 泛型字典 0104 c#
  5. 全局变量链接时的冲突
  6. 程序员都该懂的 UML 规范!
  7. mysql sql trace_用MySQL的optimizer_trace进行sql调优
  8. Hive cube,roll up入门案例
  9. 无法启动此程序,因为计算机中丢失 的解决办法
  10. html图片怎么弄透明背景,如何使用CSS实现背景图像透明
  11. 矩阵乘法运算-JAVA实现
  12. iOS实时美颜滤镜实现
  13. html自动排版 vs,Visual Stidio Code (vscode)自定义HTML页面自动生成格式
  14. Dubbo的基本使用
  15. 不可不知的10款3dMax展UV插件
  16. 桌面窗口管理器(dwn.exe)内存占用大怎么解决
  17. 无力吐槽的 create-shortcut .exe
  18. python自动生成和读取word_使用Python自动生成Word文档的教程
  19. 检查是否存在满足条件的数字组合
  20. 英语的加减乘除怎么计算机,用英语表示加减乘除法的用法

热门文章

  1. Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法
  2. 能和LoadRunner匹敌的VS2010/2012Web负载测试
  3. C++资源之不完全导引(上)
  4. Java业务代表模式
  5. 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具
  6. MYSQL 查询数据排序数据和分组数据
  7. springBean生命周期----来自spring实战总结
  8. gitlab安装各种坑
  9. Mozilla开源了VR框架A-Frame
  10. Windows Phone 8初学者开发—第19部分:设置RecordAudio.xaml页面