题目

根据一些众所周知的结论,我们先跑一棵生成树出来,之后把所有简单环都搞出来,那么\(u\)到\(v\)的路径一定可以由树上的路径和一些简单环拼起来得到

把所有简单环都插到一个线性基里,之后dfs一下线性基求出这些环能拼出的异或和有哪些;

再求一下树上的异或前缀和,\(u\)到\(v\)的路径一定是\(pre_u\bigoplus pre_v\)再异或上一些环构成的

开两个桶,\(A[i]\)表示前缀异或和为\(i\)的点得个数,\(B[i]\)表示\(i\)是否能被线性基凑出来,于是答案就是\(A\times A\times B\),自然是异或卷积,于是大力fwt就好了

代码

#include<bits/stdc++.h>
#define re register
#define LL long long
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=1e5+5;
const int len=262144;
struct E{int v,nxt,w;}e[maxn<<1];
int fa[maxn],n,m,q,head[maxn],num,vis[maxn],u[maxn*3],v[maxn*3],va[maxn*3],pre[maxn],M;
int lb[18];LL tax[len],tmp[len];
inline int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
inline void add(int x,int y,int w) {
e[++num].v=y;e[num].nxt=head[x];head[x]=num;e[num].w=w;
}
void dfs(int x) {
vis[x]=1;
for(re int i=head[x];i;i=e[i].nxt) {
if(vis[e[i].v]) continue;
pre[e[i].v]=pre[x]^e[i].w;
dfs(e[i].v);
}
}
inline void ins(int x) {
for(re int i=17;i>=0;--i)
if(x>>i&1) {
if(!lb[i]) {lb[i]=x;return;}
x^=lb[i];
}
}
void Dfs(int bit,int nw) {
if(bit==-1) {
tmp[nw]=1;return;
}
Dfs(bit-1,nw);
if(lb[bit]) Dfs(bit-1,nw^lb[bit]);
}
inline void Fwt(LL *f,int o) {
for(re int i=2;i<=len;i<<=1)
for(re int ln=i>>1,l=0;l<len;l+=i)
for(re int x=l;x<l+ln;++x) {
LL g=f[x],h=f[x+ln];
f[x]=g+h,f[x+ln]=g-h;
if(o==-1) f[x]>>=1ll,f[x+ln]>>=1ll;
}
}
int main() {
n=read(),m=read(),q=read();
for(re int i=1;i<=n;i++) fa[i]=i;
for(re int x,y,w,i=1;i<=m;i++) {
x=read(),y=read(),w=read();
int xx=find(x),yy=find(y);
if(xx==yy) {u[++M]=x,v[M]=y,va[M]=w;continue;}
fa[xx]=yy,add(x,y,w),add(y,x,w);
}
for(re int i=1;i<=n;i++) if(!vis[i]) dfs(i);
for(re int i=1;i<=M;i++) ins(pre[u[i]]^pre[v[i]]^va[i]);
for(re int i=1;i<=n;i++) tax[pre[i]]++;
Dfs(17,0);Fwt(tax,1),Fwt(tmp,1);
for(re int i=0;i<len;i++) tax[i]=tax[i]*tax[i]*tmp[i];
Fwt(tax,-1);
for(re int x;q;--q) printf("%lld\n",tax[x=read()]);
return 0;
}

lg5169 xtq的异或和的更多相关文章

  1. [洛谷P5169]xtq的异或和

    题目大意:给你一张$n(n\leqslant10^5)$个点$m(m\leqslant3\times10^5)$条边的无向图,每条边有一个权值,$q(q\leqslant2^{18})$次询问,每次询 ...

  2. P5169 xtq的异或和(FWT+线性基)

    传送门 我咋感觉我学啥都是白学-- 首先可以参考一下这一题,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和 然而我好像并不会求线性基能张 ...

  3. Android数据加密之异或加密算法

    前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...

  4. Oracle数据库异机升级

    环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...

  5. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  6. [PHP][位转换积累]之异或运算的简单加密应用

    异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...

  7. Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5646   Accepted: 1226 Description In an ...

  8. RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例

    测试环境:     操作系统  :  Red Hat Enterprise Linux ES release 4 (Nahant Update 4)   VMWARE     数据库     :  O ...

  9. RAC异机恢复

    RAC异机恢复PDCL到PFCL: PNCL:RAC+ASM ,product env   db name:PNCL   instance:PDCL1 PDCL2 PFCL:RAC+ASM ,perf ...

随机推荐

  1. spring cloud学习--feign

    简单示例 增加feign maven依赖 <dependency> <groupId>org.springframework.cloud</groupId> < ...

  2. centos 7 设置开机启动脚本

    vi /etc/rc.d/rc.local 在末尾追加 sh脚本 sh脚本要提前赋予执行权限 下面是测试,开机同步北京时间 [root@commonTest bin]# vi /usr/local/b ...

  3. python学习第三天-元组、列表及字典

    元组 # 元组() 关键字:tuple# 元组的值一旦确定,不可更改,包括增.删.改都不行# 1.元组只有一个数据时,加逗号在后面,不然就不是元组类型的数据tuple_1 = ("hello ...

  4. SpringBoot-技术专区-异步编程

    最近在实现一个聚合搜索的需求时,由于需要从五个索引中查询数据,然后再将搜索结果组合返回给前端app展现,显然这个地方不能再用同步的方式来操作了,如果有一个索引查询出现耗时较长,那么其余的请求都会排同步 ...

  5. 后台得到jsp提交name属性相同的内容

    直接上代码: req.setCharacterEncoding("utf-8");String [] node = req.getParameterValues("nod ...

  6. js转换成字符串

    有两种方法: 1.对于boolean, number, string类型,可调用toString()方法 2.用String(var)方法 其中,第二种方法使用范围更广,可将没有toString()方 ...

  7. OpenCV常用基本处理函数(5)图像模糊

    2D卷积操作 cv.filter2D() 可以让我们对一幅图像进行卷积操作, 图像模糊(图像平滑)使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音 ...

  8. spring需要表

    DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` ...

  9. c++使用不定参数

    定义不定参数,使用的宏有: va_start(ap, arg)  初始化一个va_list的变量ap va_arg(ap, type)  获取下一个type类型的参数 va_end(ap)  结束使用 ...

  10. NRF24L01学习

    一.工作模式 PWR_UP和PRIM_RX在寄存器0x00中的第0位和第1位. 待机模式I:只是使用晶振工作,CE=0时是拉低? 待机模式II:部分时钟缓冲器处在工作模式.TX FIFO为空并且CE为 ...