博客
关于我
HDU Bit Magic (2-Sat)
阅读量:323 次
发布时间:2019-03-04

本文共 1035 字,大约阅读时间需要 3 分钟。

  • 题意
    已知一位数组a[]和二维数组b[][]满足以下关系
    如图所示
    给定数组b[][],问是否存在数组a[],如果存在,输出"YES",否则输出"NO"
    • 题解
      写的是2-Sat的专题,想了好久都没想到怎么和2-Sat扯上关系,后来看了题解,说是按位进行2-Sat,就知道要怎么做了。因为位数最多不超过31位i,我一开始想的是从数组b[][]中找到条件,对这31位综合起来只进行一次2-Sat,后来T掉了,但是想了想复杂度是不会T的,现在还想不明白。后来只好对每一位建图,对每一位进行一次2-Sat,如果有一位找出了矛盾,就直接NO了。
    • 代码
#pragma GCC optimize(2)#include
using namespace std;typedef long long ll;typedef unsigned long ul;typedef unsigned long long ull;#define pi acos(-1.0)#define e exp(1.0)#define pb push_back#define mk make_pair#define fir first#define sec second#define scf scanf#define prf printftypedef pair
pa;const int dir_4[4][2]={ -1,0,0,1,1,0,0,-1};const int dir_8[8][2]={ -1,-1,-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1};const ll INF=0x3f3f3f3f3f3f3f3f;const int MAX_N=520*2;struct node{ int to,nex;}edge[1000000];int N,cnt,tot,scc_cnt,head[MAX_N],dfn[MAX_N],low[MAX_N],sccnum[MAX_N];int base;ll b[520][520];void add(int u,int v){ edge[cnt].to=v; edge[cnt].nex=head[u]; head[u]=cnt++; return ;}stack
st;void Init(){ cnt=tot=scc_cnt=0; for(int i=0;i

转载地址:http://cpph.baihongyu.com/

你可能感兴趣的文章
Linux探测工具BCC(可观测性)
查看>>
Opentelemetry Metrics SDK
查看>>
流量控制--2.传统的流量控制元素
查看>>
SNMP介绍及使用,超有用,建议收藏!
查看>>
SDUT2161:Simple Game(NIM博弈+巴什博弈)
查看>>
51nod 1596 搬货物(二进制处理)
查看>>
来自星星的祝福(容斥+排列组合)
查看>>
Hmz 的女装(递推)
查看>>
HDU5589:Tree(莫队+01字典树)
查看>>
Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)
查看>>
不停机替换线上代码? 你没听错,Arthas它能做到
查看>>
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
查看>>
分库分表的 9种分布式主键ID 生成方案,挺全乎的
查看>>
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
查看>>
Python网络编程之socket应用
查看>>
Python开发之序列化与反序列化:pickle、json模块使用详解
查看>>
Git学习笔记:基础篇
查看>>
回顾-生成 vs 判别模型-和图
查看>>
Python 的 type 及常用魔法方法(上)
查看>>
采坑 - 字符串的 "" 与 pd.isnull()
查看>>