gym101201F Illumination 2-SAT
题目大意:
给出n*n的网格,l栈灯,每盏灯可以选择照亮竖着的2*r+1的范围,或者横着的2*r+1的范围,要求一个格子不会同时被一盏以上的横着的灯照亮,也不能被一盏以上的竖着的灯照亮,所有灯必须亮着,问是否可行。
思路:2-sat的题目,如果两盏灯之间不能同时横着放,则代表必须一横一竖,则找到了2-sat的建边关系,具体看代码。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
int n,r,l,head[maxn<<],tot;
bool vis[maxn<<];
int s[maxn<<],top;
struct node{
int x,y;
}a[maxn];
struct edge{
int to,Next;
}e[(maxn*maxn)<<];
void init(){
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
tot=;
}
void addv(int u,int v,int val){
int tmpu=(u<<)+val;
int tmpv=(v<<)+val;
e[++tot]={tmpv,head[tmpu^]},head[tmpu^]=tot;//注意建边 相容的情况建边
e[++tot]={tmpu,head[tmpv^]},head[tmpv^]=tot;
}
bool dfs(int u){
if(vis[u^])return false;
if(vis[u])return true;
vis[u]=;
s[top++]=u;
for(int i=head[u];i!=-;i=e[i].Next)
{
if(!dfs(e[i].to))return false;
}
return true;
}
bool two_sat(){
for(int i=;i<(l<<);i+=){
if(!vis[i]&&!vis[i^]){
top=;
if(!dfs(i)){
while(top)vis[s[--top]]=;
if(!dfs(i^))return false;
} }
}
return true;
}
int main(){
while(scanf("%d%d%d",&n,&r,&l)!=EOF)
{
init();
for(int i=;i<l;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i=;i<l;i++)
{
for(int j=;j<i;j++)
{
if(a[i].x==a[j].x&&abs(a[j].y-a[i].y)<*r+){
addv(i,j,);
};
if(a[i].y==a[j].y&&abs(a[j].x-a[i].x)<*r+){
addv(i,j,);
};
}
}
if(two_sat())puts("YES");
else puts("NO");
}
}
gym101201F Illumination 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 ...
- Global Illumination
[Global Illumination] Global Illumination (GI) is a system that models how light is bounced off of s ...
- 学习笔记(two sat)
关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...
- Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)
关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propa ...
- 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 ...
随机推荐
- jQuery 对象和 json 之间的转换
JSON.parse() json 转换成 对象 JSON.stringify() 对象转换成json 想问下广大网友大神 js 里面有数组转换或者转换成数组的函数么?小弟等--
- Opencv3 Mat对象构造函数与常用方法
构造函数 Mat() Mat(int rows,int cols,int type) Mat(Size size,int type) Mat(int rows,int cols,int type,co ...
- QT编译时出现警告 Warning: Class Node implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!
1.一定要将public QObject放在public QGraphicsItem的前面,并且在该类的定义中添加Q_OBJECT宏. class XXGraphicsItem : public QO ...
- c语言实践 打印字母三角形
效果如下: 我是怎么想的: 总共需要打印6行字母,那么就需要一个循环来控制打印第几行,大概代码如下: for(int i=0;i<6;i++) { } 每行都会打印字母,而且循环越往后,需要打印 ...
- 制作3D旋转视频展示区
CSS3 3D变形制作视频展示区 <!doctype html> <html lang="en"> <head> <meta charse ...
- SharePoint配置网站集的审核设置
配置网站集的审核设置 您可以使用 Microsoft SharePoint Server 2010 的审核功能来跟踪哪些用户对网站集的网站.内容类型.列表.库.列表项和库文件执行了哪些操作.了解谁对哪 ...
- Sql--IDENTITY()自动增长列
CREATE TABLE Tables( , ) ,) NOT NULL, [UpdateTime] [datetime] NOT NULL, CONSTRAINT [PK_Tables] PRIMA ...
- 关于PHP中的Trait
今天看PHP框架,看到Trait部分.没见过,好奇查了一下. PHP手册说的是解决多继承的问题.但是一般面向对象的语言中,解决多继承都是通过接口,PHP也有接口.貌似看上去Trait和Interfac ...
- 1221: Fibonacci数列 [数学]
1221: Fibonacci数列 [数学] 时间限制: 1 Sec 内存限制: 128 MB 提交: 116 解决: 36 统计 题目描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn- ...
- 看了这篇Dubbo RPC面试题,让天下没有难面的面试题!
前言: RPC非常重要,很多人面试的时候都挂在了这个地方!你要是还不懂RPC是什么?他的基本原理是什么?你一定要把下边的内容记起来!好好研究一下!特别是文中给出的一张关于RPC的基本流程图,重点中 ...