POJ 3905 Perfect Election(2-sat)
POJ 3905 Perfect Election
id=3905" target="_blank" style="">题目链接
思路:非常裸的2-sat,就依据题意建边就可以
代码:
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <vector>
- #include <algorithm>
- using namespace std;
- const int MAXNODE = 2005;
- 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;
- int n, m;
- int main() {
- while (~scanf("%d%d", &n, &m)) {
- gao.init(n);
- int u, v;
- while (m--) {
- scanf("%d%d", &u, &v);
- if (u > 0 && v > 0) {
- u--; v--;
- gao.add_Edge(u, 1, v, 1);
- } else if (u > 0 && v < 0) {
- v = -v;
- u--; v--;
- gao.add_Edge(u, 1, v, 0);
- } else if (u < 0 && v > 0) {
- u = -u;
- u--; v--;
- gao.add_Edge(u, 0, v, 1);
- } else if (u < 0 && v < 0) {
- u = -u; v = -v;
- u--; v--;
- gao.add_Edge(u, 0, v, 0);
- }
- }
- printf("%d\n", gao.solve());
- }
- return 0;
- }
POJ 3905 Perfect Election(2-sat)的更多相关文章
- POJ 3905 Perfect Election (2-Sat)
Perfect Election Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 438 Accepted: 223 De ...
- 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 ...
- poj 1543 Perfect Cubes(注意剪枝)
Perfect Cubes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14901 Accepted: 7804 De ...
- POJ 3905 Perfect Election
2-SAT 裸题,搞之 #include<cstdio> #include<cstring> #include<cmath> #include<stack&g ...
- POJ 3905 Perfect Election (2-SAT 判断可行)
题意:有N个人参加选举,有M个条件,每个条件给出:i和j竞选与否会只要满足二者中的一项即可.问有没有方案使M个条件都满足. 分析:读懂题目即可发现是2-SAT的问题.因为只要每个条件中满足2个中的一个 ...
- POJ 3398 Perfect Service(树型动态规划,最小支配集)
POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by ...
- 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 农夫约翰上个 ...
- POJ 2376 Cleaning Shifts(轮班打扫)
POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] Farmer ...
- POJ 3253 Fence Repair(修篱笆)
POJ 3253 Fence Repair(修篱笆) Time Limit: 2000MS Memory Limit: 65536K [Description] [题目描述] Farmer Joh ...
随机推荐
- discuz “欣” “衡” 用户不能注册 bug修改
discuz “欣” “衡” 用户不能注册 原因是 discuz 有这样一段代码 function check_username($username) { $guestexp = '\xA1\xA1| ...
- Blender插件之操作器(Operator)实战
前言 在Blender中, 操作器(Operator)是它的核心. 用户通过各种操作器来创建和操作场景中的物体. 操作器对象继承自 class bpy.types.Operator(bpy_struc ...
- Java 系列之spring学习--spring搭建(一)
一.新建maven项目 二.引入spring jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- meta标签的作用及整理
[转载] meta的标签的使用是我在前端学习中曾经困惑过一段时间的问题.一方面不是很了解meta标签的用途,另一方面是对于meta标签里的属性和值不是懂,也不知道从哪里冒出来的,所以这篇文章专门整理下 ...
- 企业级时间轴插件Vue-timelinepick
简介 时间范围选择插件 取当前时间之前一段时间范围 按刻,小时,天分类 在线演示及下载 在线演示:https://yelingfeng.github.io/vue-timelinepick/ 本地下载 ...
- 【Oracle】SCOPE=MEMORY|SPFILE|BOTH
SCOPE=MEMORY|SPFILE|BOTH 指示了修改参数时的“作用域”: SCOPE=MEMORY :只在实例中修改,重启数据库后此次修改失效. SCOPE=SPFILE :只修改SPFILE ...
- CorelDRAWX8新功能摆脱传统工作模式
最近,有一则好消息CorelDRAW X8特惠啦!功能不少价格却不高的CDR X8很快成了设计师们的新宠,三折之后你动心了么? 点击这里了解更多.. 那么CDR X8到底有何功能和亮点呢? 完全可自定 ...
- SQL数据查询2
USE h CREATE TABLE zy1( empno INT, ename ), job ), mgr INT, hiredate DATE, sal DOUBLE, COOM DOUBLE, ...
- [NOI2005]瑰丽华尔兹_动态规划_单调队列
Code: #include<cstdio> #include<cstring> #include<deque> #include<algorithm> ...
- 【Git教程】Git教程之分支管理
在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操作命令进行了简要介绍,本文主要集中介绍Git的另一个主要的特点:分支管理和多人协作. 什么是分支管理 当一个任务需要多人协作完成时,每个 ...