题目传送门

题目大意:

  给出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的更多相关文章

  1. 多边形碰撞 -- SAT方法

    检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...

  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. Map Labeler POJ - 2296(2 - sat 具体关系建边)

    题意: 给出n个点  让求这n个点所能建成的正方形的最大边长,要求不覆盖,且这n个点在正方形上或下边的中点位置 解析: 当然是二分,但建图就有点还行..比较难想..行吧...我太垃圾... 2 - s ...

  4. Global Illumination

    [Global Illumination] Global Illumination (GI) is a system that models how light is bounced off of s ...

  5. 学习笔记(two sat)

    关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...

  6. Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

    关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propa ...

  7. LA 3211 飞机调度(2—SAT)

    https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...

  8. HIT 1917 2—SAT

    题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...

  9. 2 - sat 模板(自用)

    2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一  POJ 3207 Ikki's Story IV ...

随机推荐

  1. PhoneGap 3.4 开发配置及问题

    PhoneGap这个坑爹货,开发确实迅速,又无需学习新知识,但又有N多深不见底坑,最大的坑无疑是性能,滑动时卡顿明显,iPhone5上性能比较好,大部分安卓上就坑爹了,神马动画效果最好少用:其次是不同 ...

  2. php_imagick超强的PHP图片处理扩展

      php_imagick是一个可以供PHP调用ImageMagick功能的PHP扩展,使用这个扩展可以使PHP具备和ImageMagick相同的功能. ImageMagick是一套功能强大.稳定而且 ...

  3. hook NtQueryDirectoryFile实现文件隐藏

    一.NtQueryDirectoryFile函数功能(NT系列函数) NtQueryDirectoryFile函数:在一个给定的文件句柄,该函数返回该文件句柄指定目录下的不同文件的各种信息. 根据传入 ...

  4. 22.NULL 值

    NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...

  5. xgboost 完全调参指南

    http://www.2cto.com/kf/201607/528771.html xgboost: https://www.analyticsvidhya.com/blog/2016/03/comp ...

  6. Yii2验证登录得User类

    Yii2中的  Class yii\web\User 是如果进行验证登录,如果我们使用User类验证登录会给我们减少很多麻烦.在此就拿Yii2中自带的登录功能进行说明. 配置.在应用配置文件compo ...

  7. Jlabel实现内容自动换行

    Jlabel实现内容自动换行 摘自:https://blog.csdn.net/zhhtao89/article/details/50179695   2015年12月04日 21:09:27 阅读数 ...

  8. 使用HttpServletRequestWrapper修改请求参数 和 使用HttpServletResponseWrapper截获响应数据

    Servlet规范中的Filter引入了一个功能强大的拦截模式.Filter能在request到达servlet的服务方法之前拦截request对象,而在服务方法转移控制后又能拦截response对象 ...

  9. Android不间断上报位置信息-应用进程防杀指南

    没用的 除非加入白名单 或者用户自己设置锁屏后不被杀死 不然的话 锁屏5分钟以内app会被杀死,包 括所有的service. 说白了就是定位不要纯依赖gps,很多硬件为了省电,会对熄屏下的模块功能和运 ...

  10. 如何看待那些不能重现的bug?

    在我们日常测试活动中,经常会发现一些bug,但是这些bug可能就是昙花一现,再也无法(或者很难)重现出来,内心灰常崩溃.那到底有哪些方面可能会导致这类的缺陷发生呢? 我以自己工作中所遇到的给出一些自己 ...