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. IT之梦

    生活原本不孤单,可惜人们总爱感叹 日子其实很简单,而我却不甘平淡 工作中我尽情的挥洒热汗,只为让成功离自己更近一点 生活中我为人和善,只为人生的路上多一个伙伴 时间不等人,IT尚遥远 我愿舍身敬业,誓 ...

  2. .net中使用ODP.net访问Oracle数据库(无客户端部署方法)

      ODP.net是Oracle提供的数据库访问类库,其功能和效率上都有所保证,它还有一个非常方便特性:在客户端上,可以不用安装Oracle客户端,直接拷贝即可使用. 以下内容转载自:http://b ...

  3. 听课程C# Intermediate: Classes, Interfaces and OOP的笔记,持续修改更新ing

    在第二章第7节中,我尝试并给我的Vistal Studio 2015加装了Resharper,感觉非常好用,现在就分享下我的一点心得. 首先为了防止Resharper的快捷键失灵,可以先重置所有的 V ...

  4. Maven构件解析(转)

    文章转自http://gavinwind2000.iteye.com/blog/2290652 谢谢博主的总结! 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在 ...

  5. 探索软件工程道路上的我III (Θ∀Θ#)

    github地址:https://github.com/JUNYU217/2016-03-08 开发语言:Java 开发工具:UltraEdit || 为月末了,网费欠了...很抱歉的拖了那么久的作业 ...

  6. IOS中程序如何进行推送消息(本地推送,远程推送)

    [1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...

  7. php语言的几种循环语句的使用格式,及其区别

    while 只要指定的条件成立,则循环执行代码块 do...while 首先执行一次代码块,然后在指定的条件成立时重复这个循环 for 循环执行代码块指定的次数 foreach 根据数组中每个元素来循 ...

  8. HowTo系列之virtualenv

    1. 简介 virtualenv是一个用于创建Python独立运行环境的命令行工具. 在我们使用python进行开发的时候,我们会依赖不同的Python版本和不同的库版本.当我们的项目需要依赖别的开发 ...

  9. Spike Notes on Theory of (Software) Transactional Memory[Doing]

    Motivation 程序员是否需要在处理一致性问题或者同步时,一定要make hands dirty?能不能专注于应用级原子性,而无需考虑低层操作系统.运行时支持的原子性概念或者语言构造? 软件事务 ...

  10. linux挂着U盘和光盘

    挂载光盘 mkdir /mnt/cdrom/ (建立挂载点) mount -t iso9660 /dev/cdrom /mnt/cdrom (挂载光盘) mount /dev/sr0 /mnt/cdr ...