博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P5169 xtq的异或和(FWT+线性基)
阅读量:6911 次
发布时间:2019-06-27

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

我咋感觉我学啥都是白学……

首先可以参考一下,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和

然而我好像并不会求线性基能张成的元素……话说原来这个在线性基里爆搜就可以了么……

于是我们可以随便选一个点为根,\(dfs\)一遍跑出个生成树,\(dis[u]\)表示点\(u\)到根节点的路径上的异或和,那么\(dis[u]\bigoplus dis[v]\)就是\(u,v\)之间的一条路径的权值,设\(x\)为一个线性基能张成的元素,那么\(dis[u]\bigoplus dis[v]\bigoplus x\)的答案就要加一

\(q\)为线性基大小,这样的话复杂度就是\(O(n^2q)\),即枚举点对再枚举线性基能张成的元素

设数组\(A,B\)\(A[i]=1\)当且仅当\(i\)能被线性基里的元素张成否则\(A[i]=0\)\(B[i]\)为到根节点的路径的异或和为\(i\)的点的个数,于是发现答案就是\(A\times B\times B\),其中乘法表示异或卷积,用\(FWT\)优化即可

//minamoto#include
#define R register#define fp(i,a,b) for(R int i=a,I=b+1;i
I;--i)#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)template
inline bool cmax(T&a,const T&b){return a
'9'||ch<'0')(ch=='-')&&(f=-1); for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0'); return res*f;}char sr[1<<21],z[20];int C=-1,Z=0;inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}void print(R int x){ if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x; while(z[++Z]=x%10+48,x/=10); while(sr[++C]=z[Z],--Z);sr[++C]='\n';}const int N=3e5+5,P=998244353,inv=499122177;inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}int ksm(R int x,R int y){ R int res=1; for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x); return res;}struct eg{int v,nx,w;}e[N<<1];int head[N],tot;inline void add_edge(R int u,R int v,R int w){e[++tot]={v,head[u],w},head[u]=tot;}int p[105],dis[N],vis[N],is[N],a[N];int mx,lim,n,m,q,u,v,w,c;void dfs(int u){ vis[u]=1; go(u)if(!vis[v])dis[v]=dis[u]^e[i].w,dfs(v); else is[dis[v]^dis[u]^e[i].w]=1;}void ins(R int x){ fd(i,mx-1,0)if(x&(1<
>=1; lim=(1<

转载于:https://www.cnblogs.com/bztMinamoto/p/10206365.html

你可能感兴趣的文章
QQ空间技术架构之深刻揭密
查看>>
nfs常见问题解决方法
查看>>
centOS 6 安装mongoDB
查看>>
Java基础学习总结(10)——static关键字
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
Linux实用工具
查看>>
JDBC Statement 实例- 查询结果集
查看>>
MyBatis学习总结(11)——MyBatis动态Sql语句
查看>>
SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
Java消息服务JMS详解
查看>>
RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
查看>>
Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)...
查看>>
2 curses库IO处理--光标操作
查看>>
DB2中的is null与=‘’
查看>>
git的使用
查看>>
win10中“windbg+vmware+win7双机调试”设置
查看>>
socket结构体
查看>>
网关和路由的区别
查看>>
如何评判一个App外包公司的实力?
查看>>
Grin交易原理详解
查看>>