hdu1824-Let's go home:图论2-SAT
关键在于找出一定矛盾的条件,设一队的3个人为(a,b,c),a为队长,那么(a不留下,b不留下)矛盾,(a不留下,c不留下)矛盾; 对于每一对队员,(a留下,b留下)矛盾。
把模型建好,剩下的就是套模板了。
1 #include<cstdio> 2 #include<vector> 3 #include<cstring> 4 using namespace std; 5 6 const int maxn = 3000+10; 7 8 struct TwoSAT 9 { 10 int n; 11 vector<int> G[maxn*2]; 12 bool mark[maxn*2]; 13 int S[maxn*2], c; 14 15 bool dfs(int x) 16 { 17 if (mark[x^1]) return false; 18 if (mark[x]) return true; 19 mark[x] = true; 20 S[c++] = x; 21 for (int i = 0; i < G[x].size(); i++) 22 if (!dfs(G[x][i])) return false; 23 return true; 24 } 25 26 void init(int n) 27 { 28 this->n = n; 29 for (int i = 0; i < n*2; i++) G[i].clear(); 30 memset(mark, 0, sizeof(mark)); 31 } 32 33 // x = xval or y = yval 34 void add_clause(int x, int xval, int y, int yval) 35 { 36 x = x * 2 + xval; 37 y = y * 2 + yval; 38 G[x^1].push_back(y); 39 G[y^1].push_back(x); 40 } 41 42 bool solve() 43 { 44 for(int i = 0; i < n*2; i += 2) 45 if(!mark[i] && !mark[i+1]) 46 { 47 c = 0; 48 if(!dfs(i)) 49 { 50 while(c > 0) mark[S[--c]] = false; 51 if(!dfs(i+1)) return false; 52 } 53 } 54 return true; 55 } 56 }; 57 58 59 /// 60 #include <iostream> 61 #include <cmath> 62 using namespace std; 63 TwoSAT solver; 64 65 int main() 66 { 67 int t,m; 68 while(~scanf("%d%d",&t,&m)) 69 { 70 solver.init(t*3); 71 for(int i=0;i<t;i++) 72 { 73 int a,b,c; 74 scanf("%d%d%d",&a,&b,&c); 75 solver.add_clause(a,0,b,0); // 0表示不留下,1表示留下 76 solver.add_clause(a,0,c,0); 77 //solver.add_clause(b,1,c,0); 78 //solver.add_clause(c,1,b,0); 79 } 80 81 for(int i=0;i<m;i++) 82 { 83 int a,b; 84 scanf("%d %d",&a,&b); 85 solver.add_clause(a,1,b,1); 86 } 87 printf("%s\n",solver.solve()?"yes":"no"); 88 } 89 return 0; 90 }
转载于:https://www.cnblogs.com/oneshot/p/4007884.html
hdu1824-Let's go home:图论2-SAT相关推荐
- 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...
近日,计算机科学与工程学院(网络空间安全学院)2017级本科生和肖鸣宇教授撰写的论文"A Fast Algorithm for SAT in Terms of Formula Length& ...
- 图论 —— 2-SAT 问题
[问题概述] 2-SAT问题是这样的:有n个布尔变量xi,另有m个需要满足的条件,每个条件的形式都是"xi为真/假或者xj为真/假" SAT 是适定性(Satisfiability ...
- 图论专题-学习笔记:强连通分量
图论专题-学习笔记:强连通分量 一些 update 1. 前言 2. 定义 3. 求法 4. 应用 5. 总结 一些 update update on 2021/8/12:增加了对于 Kosaraju ...
- 一笔画问题【数据结构-图论】
回家路上听到2个人在说:田字怎么一笔写成,并且笔划不重复. 田 我回家想了许久,觉得无论如何走正常的途径肯定是不行的,投机取巧脑筋急转弯的我不讨论. 那么是否可以找到数学定理? 其实就是欧拉七桥问题: ...
- 资料分享:数学建模资料分享 -- 图论部分
背景 今天上午,在教六第一阶梯教室为数学建模俱乐部的同学们分享了有关图论的基本知识和应用. 课后,为同学们留了一个算法实现的小练习,大家可以先做一下.在本图文的末尾处,我把上课的资料以及代码分享出来, ...
- 各种图论模型及其解答(转)
原文转自Jelline blog http://blog.chinaunix.net/uid-9112803-id-411340.html 摘要: 本文用另一种思路重新组织<图论及其应用> ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- 图论刷水题记录(一)(最短路-----dijkstra算法)
最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...
- 图论分析方法gretna_基于磁共振的多模态分析对血管性认知障碍患者脑网络的研究...
摘要:目的:1.通过对血管性认知障碍(VCI)患者的结构相及静息态磁共振数据进行采集和分析,运用图论的分析方法来研究VCI患者与正常者之间的脑网络差异,并将脑网络拓扑属性与临床认知评分进行相关性分析, ...
- 【图论专题】图的存储与遍历(最小环、所有环的大小)
整理的算法模板合集: ACM模板 目录 Part 8.1 图的存储与遍历 P2661 信息传递(最小环) P2921 Trick or Treat on the Farm(求所有环的大小) 题单链接: ...
最新文章
- linux if 命令判断条件总结
- JavaScript两个数组是否有相同元素
- python iter 迭代函数 简介
- CSS-10-内边距
- 我在STM32单片机上跑神经网络算法
- 『设计模式』以为是个王者,后来班主任来了!设计模式--二五仔的观察者模式
- 守列划分问题(圆排列+排列dp+结论)
- 信息学奥赛一本通(1162:字符串逆序)
- 牛客网---Java题库(11~20)
- zabbix 安装和基础监控
- 软考高级 真题 2016年下半年 信息系统项目管理师 综合知识
- 一个前端开发者的mac装机清单
- python爬虫:Scrapy框架爬取纳斯达克(NASDAQ)股票数据
- 2060显卡驱动最新版本_我们平时电脑的驱动需要一直更新吗?教你如何正确的维护你的驱动...
- my资源列表一 (csdn 99% 0分资源下载)
- 360 Pika 主从配置
- “为什么要选择Startups?”--GitCafe邀您回顾第一期企业联合招聘
- 焱融全闪存储轻松构建百亿私募量化投研平台
- 最新字节跳动面试题与岗位层级,绩效考核制度介绍
- zsh 缺少 /usr/local/share/zsh/site-functions/_brew_cask
热门文章
- 毕业论文图像快速画出
- python实验项目_Python3实验 项目结构(文件操作)
- jenkins pipeline_Jenkins流水线(pipeline)实战之:从部署到体验
- 遍历所有点的最短路径python_Python:如何优化所有可能的最短路径的计数?
- 隔行变色java代码_纯js实现隔行变色效果
- 小米mix2s html,【小米MIX2s评测】2018需要加价买的旗舰 小米MIX 2S评测_小米 MIX 2s(6GB RAM/全网通)_手机评测-中关村在线...
- leetcodepython_LeetCode 答案(python)1-17
- 中小学教师计算机应用,关于中小学教师计算机应用教育的思考
- 什么是重绘repaint?什么是回流reflow?
- IDEA build时出现Artifact contains illegal characters的解决