POJ 3905 Perfect Election

id=3905" target="_blank" style="">题目链接

思路:非常裸的2-sat,就依据题意建边就可以

代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. const int MAXNODE = 2005;
  9.  
  10. struct TwoSet {
  11. int n;
  12. vector<int> g[MAXNODE * 2];
  13. bool mark[MAXNODE * 2];
  14. int S[MAXNODE * 2], sn;
  15.  
  16. void init(int tot) {
  17. n = tot * 2;
  18. for (int i = 0; i < n; i += 2) {
  19. g[i].clear();
  20. g[i^1].clear();
  21. }
  22. memset(mark, false, sizeof(mark));
  23. }
  24.  
  25. void add_Edge(int u, int uval, int v, int vval) {
  26. u = u * 2 + uval;
  27. v = v * 2 + vval;
  28. g[u^1].push_back(v);
  29. g[v^1].push_back(u);
  30. }
  31.  
  32. void delete_Edge(int u, int uval, int v, int vval) {
  33. u = u * 2 + uval;
  34. v = v * 2 + vval;
  35. g[u^1].pop_back();
  36. g[v^1].pop_back();
  37. }
  38.  
  39. bool dfs(int u) {
  40. if (mark[u^1]) return false;
  41. if (mark[u]) return true;
  42. mark[u] = true;
  43. S[sn++] = u;
  44. for (int i = 0; i < g[u].size(); i++) {
  45. int v = g[u][i];
  46. if (!dfs(v)) return false;
  47. }
  48. return true;
  49. }
  50.  
  51. bool solve() {
  52. for (int i = 0; i < n; i += 2) {
  53. if (!mark[i] && !mark[i + 1]) {
  54. sn = 0;
  55. if (!dfs(i)){
  56. for (int j = 0; j < sn; j++)
  57. mark[S[j]] = false;
  58. sn = 0;
  59. if (!dfs(i + 1)) return false;
  60. }
  61. }
  62. }
  63. return true;
  64. }
  65. } gao;
  66.  
  67. int n, m;
  68.  
  69. int main() {
  70. while (~scanf("%d%d", &n, &m)) {
  71. gao.init(n);
  72. int u, v;
  73. while (m--) {
  74. scanf("%d%d", &u, &v);
  75. if (u > 0 && v > 0) {
  76. u--; v--;
  77. gao.add_Edge(u, 1, v, 1);
  78. } else if (u > 0 && v < 0) {
  79. v = -v;
  80. u--; v--;
  81. gao.add_Edge(u, 1, v, 0);
  82. } else if (u < 0 && v > 0) {
  83. u = -u;
  84. u--; v--;
  85. gao.add_Edge(u, 0, v, 1);
  86. } else if (u < 0 && v < 0) {
  87. u = -u; v = -v;
  88. u--; v--;
  89. gao.add_Edge(u, 0, v, 0);
  90. }
  91. }
  92. printf("%d\n", gao.solve());
  93. }
  94. return 0;
  95. }

POJ 3905 Perfect Election(2-sat)的更多相关文章

  1. POJ 3905 Perfect Election (2-Sat)

    Perfect Election Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 438   Accepted: 223 De ...

  2. POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang

    Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...

  3. poj 1543 Perfect Cubes(注意剪枝)

    Perfect Cubes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14901   Accepted: 7804 De ...

  4. POJ 3905 Perfect Election

    2-SAT 裸题,搞之 #include<cstdio> #include<cstring> #include<cmath> #include<stack&g ...

  5. POJ 3905 Perfect Election (2-SAT 判断可行)

    题意:有N个人参加选举,有M个条件,每个条件给出:i和j竞选与否会只要满足二者中的一项即可.问有没有方案使M个条件都满足. 分析:读懂题目即可发现是2-SAT的问题.因为只要每个条件中满足2个中的一个 ...

  6. POJ 3398 Perfect Service(树型动态规划,最小支配集)

    POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by ...

  7. Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)

    Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配) Description 农夫约翰上个 ...

  8. POJ 2376 Cleaning Shifts(轮班打扫)

    POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Farmer ...

  9. POJ 3253 Fence Repair(修篱笆)

    POJ 3253 Fence Repair(修篱笆) Time Limit: 2000MS   Memory Limit: 65536K [Description] [题目描述] Farmer Joh ...

随机推荐

  1. discuz “欣” “衡” 用户不能注册 bug修改

    discuz “欣” “衡” 用户不能注册 原因是 discuz 有这样一段代码 function check_username($username) { $guestexp = '\xA1\xA1| ...

  2. Blender插件之操作器(Operator)实战

    前言 在Blender中, 操作器(Operator)是它的核心. 用户通过各种操作器来创建和操作场景中的物体. 操作器对象继承自 class bpy.types.Operator(bpy_struc ...

  3. Java 系列之spring学习--spring搭建(一)

    一.新建maven项目 二.引入spring jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  4. meta标签的作用及整理

    [转载] meta的标签的使用是我在前端学习中曾经困惑过一段时间的问题.一方面不是很了解meta标签的用途,另一方面是对于meta标签里的属性和值不是懂,也不知道从哪里冒出来的,所以这篇文章专门整理下 ...

  5. 企业级时间轴插件Vue-timelinepick

    简介 时间范围选择插件 取当前时间之前一段时间范围 按刻,小时,天分类 在线演示及下载 在线演示:https://yelingfeng.github.io/vue-timelinepick/ 本地下载 ...

  6. 【Oracle】SCOPE=MEMORY|SPFILE|BOTH

    SCOPE=MEMORY|SPFILE|BOTH 指示了修改参数时的“作用域”: SCOPE=MEMORY :只在实例中修改,重启数据库后此次修改失效. SCOPE=SPFILE :只修改SPFILE ...

  7. CorelDRAWX8新功能摆脱传统工作模式

    最近,有一则好消息CorelDRAW X8特惠啦!功能不少价格却不高的CDR X8很快成了设计师们的新宠,三折之后你动心了么? 点击这里了解更多.. 那么CDR X8到底有何功能和亮点呢? 完全可自定 ...

  8. SQL数据查询2

    USE h CREATE TABLE zy1( empno INT, ename ), job ), mgr INT, hiredate DATE, sal DOUBLE, COOM DOUBLE, ...

  9. [NOI2005]瑰丽华尔兹_动态规划_单调队列

    Code: #include<cstdio> #include<cstring> #include<deque> #include<algorithm> ...

  10. 【Git教程】Git教程之分支管理

      在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操作命令进行了简要介绍,本文主要集中介绍Git的另一个主要的特点:分支管理和多人协作. 什么是分支管理   当一个任务需要多人协作完成时,每个 ...