P7717-「EZEC-10」序列【Trie】

正题

题目链接:https://www.luogu.com.cn/problem/P7717


题目大意

求有多少个长度为nnn的序列aaa满足,都在[0,k][0,k][0,k]的范围内且满足mmm个限制刑如:axxoray=za_x\ xor\ a_y=zax xor ay=z

0≤n,m≤5×105,0≤k<2300\leq n,m\leq 5\times 10^5,0\leq k<2^{30}0n,m5×105,0k<230


解题思路

首先假设有合法方案,那么对于一个位置axa_xax确定之后与它直接或间接限制的aya_yay都将被确定。

我们可以设限制为一条边,然后先dfsdfsdfs判断一次是否限制之间没有冲突。

然后考虑对于每个联通块我们随意找到一个位置xxx,那么其他的点都将被表达为axxorwa_x\ xor\ wax xor w的形式。

然后我们要求找到有多少个axa_xax满足对于所有的www都有axxorw≤ka_x\ xor\ w\leq kax xor wk

这个可以用TrieTrieTrie数来做,每次封闭的是一个子树,直接处理就好了。

时间复杂度O(nlog⁡k)O(n\log k)O(nlogk)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
using namespace std;
const ll N=5e5+10,P=1e9+7;
struct node{ll to,next,w;
}a[N<<1];
ll n,m,k,tot,ls[N],z[N];
ll cnt,t[N][2],res,ans=1;
bool v[N];stack<ll > s;
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
bool dfs(ll x){v[x]=1;s.push(z[x]);for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(v[y]){if((z[x]^a[i].w)!=z[y])return 1;}else{z[y]=z[x]^a[i].w;if(dfs(y))return 1;	}}return 0;
}
void Limit(ll &x,ll w,ll p){if(x==-1||p<0)return;if(!x){x=++cnt;t[x][0]=t[x][1]=0;}if((k>>p)&1)Limit(t[x][(w>>p)&1^1],w,p-1);else{t[x][(w>>p)&1^1]=-1;Limit(t[x][(w>>p)&1],w,p-1);}return;
}
void Count(ll x,ll L,ll R){if(L>k)return;if(x==-1)res-=min(R,k)-L+1;if(x<=0)return;ll mid=(L+R)>>1;Count(t[x][0],L,mid);Count(t[x][1],mid+1,R);return;
}
signed main()
{scanf("%lld%lld%lld",&n,&m,&k);for(ll i=1;i<=m;i++){ll x,y,w;scanf("%lld%lld%lld",&x,&y,&w);addl(x,y,w);addl(y,x,w);}res=0;for(ll i=1;i<=n;i++){if(v[i])continue;cnt=t[0][0]=0;if(dfs(i))return puts("0")&0;while(!s.empty())Limit(t[0][0],s.top(),29),s.pop();res=k+1;Count(1,0,(1<<30)-1);ans=ans*res%P;}printf("%lld\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core MVC 授权的扩展:自定义 Authorize 和 IApplicationModelProvide

一、概述ASP.NET Core MVC 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中&#xff0c;可能采用部门&#xff08; Department , 本文采用用户组 Group &#xff09;、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。要达…

牛客题霸 [分糖果问题] C++题解/答案

牛客题霸 [分糖果问题] C题解/答案 题目描述 一群孩子做游戏&#xff0c;现在请你根据游戏得分来发糖果&#xff0c;要求如下&#xff1a; 每个孩子不管得分多少&#xff0c;起码分到一个糖果。任意两个相邻的孩子之间&#xff0c;得分较多的孩子必须拿多一些糖果。(若相同则…

不止代码 洛谷P1006 传纸条(dp)

传送门 走两次 dp[x1][y1][x2][y2]表示两条路分别到两个点的坐标后的最大值 为了防止走重&#xff0c;dp[x1][y1][x1][y1]赋值为无穷小 时间复杂度O&#xff08;n^4&#xff09; 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<…

通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span

前言作为.net程序员&#xff0c;使用过指针&#xff0c;写过不安全代码吗&#xff1f;为什么要使用指针&#xff0c;什么时候需要使用它&#xff1f;如果能很好地回答这两个问题&#xff0c;那么就能很好地理解今天了主题了。C#构建了一个托管世界&#xff0c;在这个世界里&…

P5180-[模板]支配树

正题 题目链接:https://www.luogu.com.cn/problem/P5180 题目大意 给出nnn个点的一张有向图&#xff0c;求每个点支配的点数量。 1≤n≤2105,1≤m≤31051\leq n\leq 2\times 10^5,1\leq m\leq 3\times 10^51≤n≤2105,1≤m≤3105 解题思路 首先定义半支配点semixsemi_xsemix…

P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)

P4062 [Code#1]Yazid 的新生舞会 杭电多校懂得都懂 Code1 分治 比较喜欢分治的做法&#xff0c;非常好写。skylee大佬题解 首先对于任何一个区间来说&#xff0c;由于两个端点不确定性非常难以一次性统计多组区间&#xff0c;因为它们没有相似之处。 考虑分治&#xff0c;…

牛客题霸 [判断回文] C++题解/答案

牛客题霸 [判断回文] C题解/答案 题目描述 给定一个字符串&#xff0c;请编写一个函数判断该字符串是否回文。如果回文请返回true&#xff0c;否则返回false。 题解&#xff1a; 左右两端同时向中间缩 代码&#xff1a; class Solution { public:/*** 代码中的类名、方法…

AC自动机:例题与机制详解

介绍 AC自动机是kmp算法和trie树的结合 大体就是做这样的题用&#xff1a; 可以发现&#xff0c;这题和trie树的区别是把多个单词往一篇文章匹配&#xff0c;而trie恰好相反 匹配的时候其实就是判断子串&#xff0c;所以又用到了kmp 定义失配指针nxt[i]&#xff1a;表示root到…

.NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

写在前面这篇我们对用户权限进行极简设计并保留其扩展性。首先很感谢大家的阅读&#xff0c;前面六章我带着大家快速入门了ASP.NET Core、ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解析并引入依赖注入的概念、Git的快速入门、Dapper的快速入门、Vue的快速入门。…

P4428-[BJOI2018]二进制【树状数组,set】

正题 题目链接:https://www.luogu.com.cn/problem/P4428 题目大意 长度为nnn的0/10/10/1串要求支持 修改一个位置求区间[l,r][l,r][l,r]有多少个子区间重排后的二进制数可以被三整除 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 首先有22k%31(k∈Z)2^{2k}\%31(k\in Z)22k…

2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘)

Random Walk 2 【2.4】Gauss-Jordan消元法求矩阵的逆 高斯消元求矩阵的逆&#xff0c;伴随单位矩阵一起消元即可。 [A,I]→[I,A−1][\text A,\text I]\to [\text I,\text A^{-1}][A,I]→[I,A−1] 移项变形&#xff0c;后就是个矩阵的逆&#xff0c;为啥赛时不写&#xff1f;&a…

牛客题霸 [顺时针旋转矩阵] C++题解/答案

牛客题霸 [顺时针旋转矩阵] C题解/答案 题目描述 有一个NxN整数矩阵&#xff0c;请编写一个算法&#xff0c;将矩阵顺时针旋转90度。 给定一个NxN的矩阵&#xff0c;和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。 题解&#xff1a; 根据题目要求&#xff0c;先…

数论:扩展欧几里德(洛谷P1516 青蛙的约会)

欧几里德 基本思想&#xff1a;gcd(q,r)gcd(r,q%r); 证明&#xff0c;设q、r的最大公因数为a&#xff0c;则qxa&#xff0c;rya&#xff0c;xy互质 不妨设x>y&#xff08;显然如果小于会在一次gcd运算后交换&#xff09; 则q%r&#xff08;x%y&#xff09;*a 显然,其与r的最…

CF802O-April Fools‘ Problem(hard)【wqs二分,优先队列】

正题 题目链接:https://www.luogu.com.cn/problem/CF802O 题目大意 nnn天每条有aia_iai​和bib_ibi​。 每条可以花费aia_iai​准备至多一道题&#xff0c;可以花费bib_ibi​打印至多一道准备好了的题。 求准备kkk道题最少要花费多少。 1≤k≤n≤51051\leq k\leq n\leq 5\ti…

2021牛客暑期多校训练营3 G-Yu Ling(Ling YueZheng) and Colorful Tree(cdq分治)

G-Yu Ling(Ling YueZheng) and Colorful Tree HOWARLI题解 大致做法就是首先考虑哪些修改可能影响询问&#xff0c;当修改点权是询问的倍数时才可能影响询问。于是考虑把他们放在一起。 首先每次枚举每种询问的倍数&#xff0c;把这些修改和当前询问放在一起&#xff0c;由于…

参加胶东开发者技术大会有感

2015年的时候&#xff0c;也是在12月&#xff0c;我和Bob(https://www.cnblogs.com/nianming/)去北京参加了“全球架构师峰会”&#xff0c;在那次会议上&#xff0c;来自百度、腾讯、阿里巴巴、京东、美团、新浪微博、Twitter等公司的架构师、技术专家们分享了各自在架构方面的…

牛客题霸 [矩阵乘法] C++题解/答案

牛客题霸 [矩阵乘法] C题解/答案 题目描述 给定两个nn的矩阵A和B&#xff0c;求AB。 题解&#xff1a; 都学过矩阵相乘把&#xff0c;[i][k][i][j]*[j][k] 代码&#xff1a; class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&…

专题:数列信息传递问题转化为图论合点问题(ybtoj-数列询问+序列破解)

文章目录前言&#xff1a;一、数列询问&#xff08;取模&#xff09;解析代码二、序列破解&#xff08;奇偶性&#xff09;解析代码thanks for reading&#xff01;前言&#xff1a; 在一个数列a中&#xff0c;对于一个大区间A和组成它的两个小区间a&#xff0c;b&#xff1b;…

CF786C-Till I Collapse【树状数组倍增,优先队列】

正题 题目链接:https://www.luogu.com.cn/problem/CF786C 题目大意 给出一个长度为nnn的序列。 对于每个k∈[1,n]k\in[1,n]k∈[1,n]求将nnn分成最少的段使得每段的长度不同。 1≤ai≤n≤1051\leq a_i\leq n\leq 10^51≤ai​≤n≤105 解题思路 考虑对于一个kkk我们的做法显然…

Docker最全教程——从理论到实战(五)

在笔者参加腾讯容器服务技术交流会时&#xff0c;我们了解到了藏区牧民的目前的生活艰辛状况&#xff0c;因此除了在同事朋友之间推荐其土特产之外&#xff0c;我们也在此进行初步分享&#xff0c;希望略尽绵薄之力&#xff0c;能够帮助到他们&#xff1a;货真价实、确保都是37…