Description

  计算给定范围内有多少种输入可以使输出为1。 我们假设3 < n < 100, 3 < m < 3000,而且网络中的门是用1到m之间的数任意编号的。

Input

文件第一行包含三个整数,分别表示输入的个数,门的个数,连接到输出的门的编号。以下的m行描述网络中的连接情况。第I行表示第I个门的两个输入,两个输入为范围[-n,m]之间的一个整数。如果输入是网络的第k个输入,则连接的描述是一个整数-k,如果输入是第j个门,则连接的描述是一个整数j。以下两行各有一个n位二进制串,表示输入的上限和下限。

Output

包含一个整数,表示给定范围内有多少种输入可以使输出为1。
由异或的性质,拓扑排序并处理出最终输出等于哪些输入异或起来,于是转成区间内有几个二进制数和指定数的按位与有奇数个1,可以数位dp
#include<cstdio>
#include<bitset>
typedef unsigned long long u64;
int n,m,o;
int es[],enx[],e0[],deg[],q[],ql=,qr=,ep=;
std::bitset<>st[];
int S[];
char l[],r[];
void ae(int a,int b){
es[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
++deg[b];
}
struct num{
u64 a,b;
num(u64 _a,u64 _b):a(_a),b(_b){};
num(u64 _a=):a(),b(_a){}
void print(){
int ss[],sp=;
u64 v1=a>>,v2=a&0xffffffffll;
u64 v3=b>>,v4=b&0xffffffffll;
while(v1|v2|v3|v4){
v2+=v1%<<;v1/=;
v3+=v2%<<;v2/=;
v4+=v3%<<;v3/=;
ss[sp++]=v4%;v4/=;
}
if(!sp)putchar('');
while(sp)putchar(''+ss[--sp]);
}
};
num operator+(num x,num y){
u64 c=x.b+y.b;
return num(x.a+y.a+(c<x.b),x.b+y.b);
}
num operator-(num x,num y){
return num(x.a-y.a-(x.b<y.b),x.b-y.b);
}
num f[][][];
void pre(){
f[n+][][]=;
for(int i=n;i;--i){
f[i][][]=f[i][][S[i]]=f[i+][][]+f[i+][][];
f[i][][]=f[i][][S[i]^]=f[i+][][]+f[i+][][];
}
}
num cal(char*s,bool e){
for(int i=;i<=n;++i)s[i]-='';
int d=;
num ans=;
for(int i=;i<=n;++i){
if(s[i])ans=ans+f[i][][d^];
if(S[i])d^=s[i];
}
if(e){
int d=;
for(int i=;i<=n;++i)if(S[i])d^=s[i];
ans=ans+d;
}
return ans;
}
int main(){
scanf("%d%d%d",&n,&m,&o);
for(int i=,a,b;i<=m;++i){
scanf("%d%d",&a,&b);
if(a<)st[i].flip(-a);
else ae(a,i);
if(b<)st[i].flip(-b);
else ae(b,i);
}
for(int i=;i<=m;++i)if(!deg[i])q[++qr]=i;
while(ql!=qr){
int w=q[++ql];
for(int i=e0[w];i;i=enx[i]){
int u=es[i];
st[u]^=st[w];
if(!--deg[u])q[++qr]=u;
}
}
for(int i=;i<=n;++i)S[i]=st[o][i];
scanf("%s%s",l+,r+);
pre();
(cal(r,)-cal(l,)).print();
return ;
}

bzoj1553: XOR网络的更多相关文章

  1. 机器学习&数据挖掘笔记_20(PGM练习四:图模型的精确推理)

    前言: 这次实验完成的是图模型的精确推理.exact inference分为2种,求边缘概率和求MAP,分别对应sum-product和max-sum算法.这次实验涉及到的知识点很多,不仅需要熟悉图模 ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 xor (根号分治)

    xor There is a tree with nn nodes. For each node, there is an integer value a_ia​i​​, (1 \le a_i \le ...

  4. 2017 ICPC网络赛(西安)--- Xor

    题目连接 Problem There is a tree with n nodes. For each node, there is an integer value ai, (1≤ai​≤1,000 ...

  5. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor

    There is a tree with nn nodes. For each node, there is an integer value a_ia​i​​, (1 \le a_i \le 1,0 ...

  6. 2019长安大学ACM校赛网络同步赛 L XOR (规律,数位DP)

    链接:https://ac.nowcoder.com/acm/contest/897/L 来源:牛客网 XOR 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  7. 2019 ICPC南昌邀请赛 网络赛 K. MORE XOR

    说明 \(\oplus x​\)为累异或 $ x^{\oplus(a)}​$为异或幂 题意&解法 题库链接 $ f(l,r)=\oplus_{i=l}^{r} a[i]$ $ g(l,r)=\ ...

  8. 【分块】计蒜客17120 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor

    题意:给一棵树,每个点有权值.q次询问a,b,k,问你从a点到b点,每次跳距离k,权值的异或和? 预处理每个点往其根节点的路径上隔1~sqrt(n)的距离的异或和,然后把询问拆成a->lca(a ...

  9. Linux网络驱动--snull

    snull是<Linux Device Drivers>中的一个网络驱动的例子.这里引用这个例子学习Linux网络驱动. 因为snull的源码,网上已经更新到适合最新内核,而我自己用的还是 ...

随机推荐

  1. java 实现一个简易计算器

    import java.util.Scanner;public class Test { public static void main(String[] args) { count(); } pub ...

  2. u-boot平台的建立,驱动的添加,索引的创建,命令机制的实现.

    一:U-boot移植前建立自己的平台: 关注的相关文件:1.u-boot- 2010.03/board/samsung/ //这个目录下需要创建自己的板级目录fsc100 cp –a smdkc100 ...

  3. Mac快捷键与命令学习

    最近开始使用mac air,以前从来没有接触过IOS系统,各种操作捉急.Mac快捷键相当多,遇到各种操作不会就只好百度,然后整理了一堆有用或者没用的命令,一股脑儿列在下面.其中有不少命令是和linux ...

  4. 用GO扫描图片像素,复制图片

    关键是使用image.image/png.image/color包 // main.go package main import ( "fmt" "bufio" ...

  5. Java复习-oop

    我们可理解“纯粹”的面向对象程序设计方法是什么样的:(1) 所有东西都是对象.可将对象想象成一种新型变量:它保存着数据,但可要求它对自身进行操作.理论上讲,可从要解决的问题身上提出所有概念性的组件,然 ...

  6. struts2 数据校验

    通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...

  7. 关于使用flexible.js自适应页面,发现文字很多时,字体会变大的问题的原因和解决方案

    具体自己还没研究过 先把别人写的文章收藏一下 主要是webkit 有一个Font Boosting特性,当文字小到一定程度的时候会触发这个属性,放大字体来提升页面的阅读感 . http://www.3 ...

  8. java压缩和解压字符串,Byte数组,String

    在网上找到的压缩解压的工具类,可以压缩String字符串 /*** * 压缩GZip * * @param data * @return */ public static byte[] gZip(by ...

  9. codeforces 27E Number With The Given Amount Of Divisors

    E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ...

  10. Pocscan搭建详解

    0x01 关于Pocscan Pocscan是一款开源 Poc 调用框架,可轻松调用Pocsuite,Tangscan,Beebeeto,Knowsec老版本POC 按照官方规范编写的 Poc对目标域 ...