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 ...
随机推荐
- POI 生成exel报表
去官网下载相关jar包 http://poi.apache.org/ package poi.zr.com; import java.io.File; import java.io.FileNot ...
- Docker学习笔记_安装和使用mysql
一.系统环境和准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.操作账号:docker 二.安装 1.搜索mysql镜像:docker search mysql 2 ...
- 498B Name That Tune
传送门 题目大意 n首音乐,第i首被听出来的概率为pi,刚开始听第一首,1s后如果听出来了则放第下一首,否则接着听这一首,第i首在连续听了ti s之后一定会被听出来,问Ts后听出来的歌的期望数量. 分 ...
- 编写高质量代码改善C#程序的157个建议——建议60:重新引发异常时使用Inner Exception
建议60:重新引发异常时使用Inner Exception 当捕获了某个异常,将其包装或重新引发异常的时候,如果其中包含了Inner Exception,则有助于程序员分析内部信息,方便代码调试. 以 ...
- 关于modelsim闪退问题
电脑之前做过仿真,modelsim是可以完美调用的,但是最近莫名其妙的就出现闪退问题,不通过quartus或者ise调用,单独使用的时候也会闪退. 偶尔一次能抓到错误消息.如下图所示: 然并卵,网上根 ...
- if 判断
语法一: if 条件: #条件成立时执行的字代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == 'female' a ...
- C# 可变参数
class Program { static void Main(string[] args) { //常规使用方法 Console.WriteLine(Add(, , , , , , , , })) ...
- 【大数据之数据仓库】HAWQ versus GreenPlum
谈到GreenPlum,肯定会有同事说HAWQ!是的,在本系列第一篇选型流水记里,也有提到.因为对HAWQ接触有限,没有深入具体了解,所以很多信息都是来自于博文,人云亦云,我把看过的资料简要整理,希望 ...
- struts2配置文件的解释
1 <?xml version="1.0" encoding="GB2312"?> <!DOCTYPE struts PUBLIC &quo ...
- [AGC006] D - Median Pyramid Hard 二分
Description 现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N. 第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的. 这是一个N=4N=4的 ...