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. UE4 WCF RestFul 服务器 读取JSON 数据并解析 简单实例

    Note:不知道为什么通过Txt读取的JsonString,如果TXT 不是ANSI编码的话,会报JsonArrayStringToUStruct  Unable to parse. bool UWg ...

  2. 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化

    string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char ...

  3. 19、lambda表达式树

    一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...

  4. LayaAir引擎——(九)

    var h = new Array(); var j = new Array(); var xbCursor = 0; function xbinit() { xbinitName(); xbRect ...

  5. [GodLove]Wine93 Tarining Round #10

    比赛链接: http://www.bnuoj.com/v3/contest_show.php?cid=4159 题目来源: lrj训练指南---几何算法 Flag ID Title   A Board ...

  6. linux部分系统信息命令

    arch  显示机器的处理器架构9(1) uname -m 显示机器处理器架构(2) uname -r显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 hdparm-i/dev/hb ...

  7. [ADB]ADB(Android Debug Bridge)简介及基础(不包含命令)

    "Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an ...

  8. Hibernate save, saveOrUpdate, persist, merge, update 区别

    Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...

  9. Linux中的入口函数main

    main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口.那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么 ...

  10. 我关注的一些关于前端的文章(copy)

    本文的核心是侧重于HTML/CSS的框架,JS框架或以JS为核心的框架不讨论(比如YUI):多屏已是既定事实,虽然不是所有开发都要考虑自适应,但有自适应功能至少说明了这框架短期内不会被淘汰,所以不带自 ...