lg5169 xtq的异或和
根据一些众所周知的结论,我们先跑一棵生成树出来,之后把所有简单环都搞出来,那么\(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的异或和的更多相关文章
- [洛谷P5169]xtq的异或和
题目大意:给你一张$n(n\leqslant10^5)$个点$m(m\leqslant3\times10^5)$条边的无向图,每条边有一个权值,$q(q\leqslant2^{18})$次询问,每次询 ...
- P5169 xtq的异或和(FWT+线性基)
传送门 我咋感觉我学啥都是白学-- 首先可以参考一下这一题,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和 然而我好像并不会求线性基能张 ...
- Android数据加密之异或加密算法
前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...
- Oracle数据库异机升级
环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...
- [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 ...
- [PHP][位转换积累]之异或运算的简单加密应用
异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...
- Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5646 Accepted: 1226 Description In an ...
- RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例
测试环境: 操作系统 : Red Hat Enterprise Linux ES release 4 (Nahant Update 4) VMWARE 数据库 : O ...
- RAC异机恢复
RAC异机恢复PDCL到PFCL: PNCL:RAC+ASM ,product env db name:PNCL instance:PDCL1 PDCL2 PFCL:RAC+ASM ,perf ...
随机推荐
- LR 场景设置
LR 场景设置group:多个脚本按照独立设置模式跑,各个脚本可以单独设置虚拟用户.运行时间scenario:多个脚本之间按照相同模式跑,将总的虚拟用户数按照一定比例分配给各个脚本 schedule ...
- js中的script标签属性
HTML <script> 元素用于嵌入或引用可执行脚本. 在html中插入一个script标签 <script src="index.js" sync cros ...
- chrome浏览器屏蔽广告插件小例子
1.创建一个文件夹,名为"清除页面广告插件" 2.在文件夹内创建"manifest.json"文件, { "name": "第一个 ...
- 一、@Html.DropDownList
一.Html.DropDownList 通过linq 将datatable转换下拉列表 //查询城市 string CityId = WebCommon.Public.GetAdminCityId() ...
- 力扣—set matrix zeroes (矩阵置零) python实现
题目描述: 中文: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 英文: Given a m x n matrix, if an eleme ...
- Python中yaml和json文件的读取和应用
Python对yaml和json文件的读取: yaml文件读取: 首先创建一个yaml文件test.yaml import yaml #引入包 f=open(path) #建立Python的文件 ...
- js unshift()
定义与用法 unshift()方法可像数组添加一个或多个元素 并返回新长度 语法 arrayObject.unshift(newElement1,newElement2,......,newEleme ...
- C++11新特性之 Move semantics(移动语义)
https://blog.csdn.net/wangshubo1989/article/details/49748703 这篇讲到了vector的push_back的两种重载版本,左值版本和右值版本.
- vue 前后端分离 接口及result规范 及drf安装使用方法
接口 # 接口:url链接,通过向链接发送不同的类型请求与参数得到相应的响应数据# 1.在视图层书写处理请求的 视图函数# 2.在路由层为视图函数配置 url链接 => 产生接口# 3.前台通 ...
- 【纪中集训】2019.08.10【NOIP提高组】模拟 A 组TJ
T1 Description Solution 有待填坑-- T2 Description 给定一个\(h(≤10)\)层.\(n(≤10)\)行.\(m(≤10)\)列的由泥土组成的立方体,挖开\( ...