2—sat
模型的解决方法看论文《利用对称性解决2-SAT问题》
HDU1814 :难度1.5
HDU1824: 难度 2
HDU1815: 难度3
HDU1816:
对于每两个人,二选一
HDU1814
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define R 1//red 为ok
#define B 2//black 访问过但不ok
#define W 0//white 待染色
const int maxn = ;
vector<int>G[maxn];
int cnt,col[maxn],ans[maxn],n,m;
bool dfs(int u)
{
if (col[u] == B) return false;
if (col[u] == R) return true;
col[u] = R;col[u^] = B;ans[cnt++]=u;
for(int i=;i<G[u].size();i++)
if (!dfs(G[u][i])) return false;
return true;
}
bool _solve()
{
int i, j;
memset(col,,sizeof(col));
for (i=; i<n; i++){
if (col[i]) continue;
cnt=;
if (!_dfs(i)){
for (j=;j<cnt;j++){
col[ans[j]]=W;
col[ans[j]^]=W;
}
if (!dfs(i^)) return false;
}
}
return true;
}
int main()
{
int i,a,b;
while (~scanf("%d %d",&n, &m)){
n <<= ;//加倍
for(i=;i<=n;i++) G[i].clear();
while (m--){
scanf("%d %d",&a, &b);
a--;b--;
G[a].push_back(b^);
G[b].push_back(a^);
}
if (_solve()){
for (i=; i<n; i++)
if(col[i] == R)
printf("%d\n",i+);
}
else printf("NIE\n");
}
return ;
}
对于每个人留或者不留,二选一
HDU1824
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define R 1
#define B 2
#define W 0
const int maxn = ;
vector<int>G[maxn];
int cnt,col[maxn],ans[maxn],n,m;
bool _dfs(int u)
{
if (col[u] == B) return false;
if (col[u] == R) return true;
col[u] = R;col[u^] = B;ans[cnt++]=u;
for(int i=;i<G[u].size();i++)
if (!_dfs(G[u][i])) return false;
return true;
}
bool _solve()
{
int i, j;
memset(col,,sizeof(col));
for (i=; i<n*; i++){
if (col[i]) continue;
cnt=;
if (!_dfs(i)){
for (j=;j<cnt;j++){
col[ans[j]]=W;
col[ans[j]^]=W;
}
if (!_dfs(i^)) return false;
}
}
return true;
}
int main()
{
int i,a,b,c;
while (~scanf("%d %d",&n, &m)){
for(i=;i<n*;i++) G[i].clear();
for(i=;i<=n;i++){
scanf("%d%d%d",&a,&b,&c);
a*=;b*=;c*=;
G[a^].push_back(b);
G[a^].push_back(c);
G[b^].push_back(a);
G[c^].push_back(a);
}
for(i=;i<=m;i++){
scanf("%d%d",&a,&b);
a*=;b*=;
G[a].push_back(b^);
G[b].push_back(a^);
}
if (_solve()) printf("yes\n");
else printf("no\n");
}
return ;
}
2—sat的更多相关文章
- 多边形碰撞 -- SAT方法
检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...
- 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 ...
- Map Labeler POJ - 2296(2 - sat 具体关系建边)
题意: 给出n个点 让求这n个点所能建成的正方形的最大边长,要求不覆盖,且这n个点在正方形上或下边的中点位置 解析: 当然是二分,但建图就有点还行..比较难想..行吧...我太垃圾... 2 - s ...
- 学习笔记(two sat)
关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...
- LA 3211 飞机调度(2—SAT)
https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...
- HIT 1917 2—SAT
题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...
- 2 - sat 模板(自用)
2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一 POJ 3207 Ikki's Story IV ...
- SAT考试里最难的数学题? · 三只猫的温暖
问题 今天无意中在Quora上看到有人贴出来一道号称是SAT里最难的一道数学题,一下子勾起了我的兴趣.于是拿起笔来写写画画,花了差不多十五分钟搞定.觉得有点意思,决定把解题过程记下来.原帖的图太小,我 ...
- 世界碰撞算法原理和总结(sat gjk)
序言 此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法.如有其它见解,可以跟作者商讨.(杨子剑,zijian_yang@yeah.net). 在一个世界中,有多个物体,物体可以 ...
- hdu 4115 (2—SAT)
题意:两个人石头剪刀布,一个人的出法已确定,另一个人的出法有一定约束,某两次要相同或者不同,问你第二个人能否全部都不失败. 思路:根据Bob出的情况,我们可以确定每次Alice有两种方案. R与P,S ...
随机推荐
- 汇编指令-adr与ldr伪汇编区别(8)
adr :相对寻址,与当前位置有关 ldr :绝对寻址,与当前位置无关 在初始化SDRAM时就会用到adr,代码如下: /* 初始化SDRAM */ ldr r0,=BWSCON //r0=SDRA ...
- html加载和解析流程
之前查找资料了解了html的整个渲染过程,对于理解页面加载帮助还是蛮大的,下面我用visio把它画成流程图,便于直观理解 好吧,居然要150字才能发布............ 浏览器渲染过程 浏览器渲 ...
- Jquery 绑定标签事件
为子元素绑定: $('#foreachResult').delegate('td', 'click', function () { alert($(this).text()); ...
- hashMap和treeMap
前言 首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. ...
- JQuery中的表单验证及相关的内容
前 言 JRedu Android应用开发中,经常要用到表单.既然用到了表单,那就不可避免的要用到表单的验证.但是,在提交表单时,但是,并不是,每次提交的表单内容都是正确的,如果 每次都将表单的 ...
- 结对编程1---四则运算---GUI
201421123003 黄建英 201421123004 黄美海 题目描述: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Window ...
- 结对编程1-基于GUI的四则运算生成器
201421123016郑怀勇 201421123017康建灿 程序代码 / 康建灿 一.需求分析 记录用户的对错总数. 程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算. 有 ...
- LaTeX排版指南
V0.0.1 工具链 CTeX:http://www.ctex.org/HomePage ,CTeX是一个中文套装,但也同时发布一个独立的ctex宏包 TeXLive:https://tug.org/ ...
- 扫雷游戏制作过程(C#描述):第五节、菜单操作(续)
前言 这里给出教程原文地址. 该项目已经放在github上托管. 发布版已经分享到百度网盘 菜单操作(续) 接着节前一章节的内容,我们继续完善菜单栏的功能. 我们首先,先完善Rank的选项,我们希望我 ...
- 201521123108 《Java程序设计》第八周学习总结
1. 本周学习总结 2. 书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 答:主要是应用到了list中的add和remove等方法,dan'sh但是这道题主要的考察点在于li ...