题目传送门

题目大意:

  给出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. 2014蓝桥杯B组初赛试题《六角填数》

    题目描述: 如图[1.png]所示六角形中,填入1~12的数字.     使得每条直线上的数字之和都相同.     图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交 ...

  2. PrimeNG01 angular集成PrimeNG

    1 开发环境 本博文基于angular5 2 步骤 2.1 创建angular5项目 详情参见百度 2.2 下载PrimeNG依赖 npm install primeng --save npm ins ...

  3. https://github.com/ildoonet/tf-pose-estimation

    https://github.com/ildoonet/tf-pose-estimation

  4. Log4J 配置 详解

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  5. zlib编程

    一.简介 zlib是提供数据压缩用的函式库,使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用,今天,zlib是一种事实上的业界标准.   二.基本信息 数据头(hea ...

  6. 关于Rest Framework中View、APIView与GenericAPIView的对比分析

    关于Rest Framework中View.APIView与GenericAPIView的对比分析  https://blog.csdn.net/odyssues_lee/article/detail ...

  7. 云存储上传控件(cloud2)-Xproer.CloudUploader

    版权所有 2009-2016荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  8. Java 集合框架必记框架图

  9. 设计模式06: Adapter 适配器模式(结构型模式)

    Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象 ...

  10. 【C#】is 和 as

    看个例子: public class User { } public class Group { } class Program { static void Main(string[] args) { ...