CF1659E AND-MEX Walk 题解
题目大意
给定一个无向带权图,总共有 个点 条边,选定一个起点 和终点 ,现在你需要确定一条路径,设路径上的 条边的边权为 ,求出 的最小值。其中 MEX 指集合中最小的不存在的自然数。
数据范围:,边权 。
题目解析
设路径上的 条边的边权为 ,为了方便设序列 的第 项为 。
首先我们通过样例发现一个结论:答案只可能是 。
其实就是证明答案不是 的时候答案为 ,证明如下:
我们发现序列 不增。
如果答案不是 ,那么序列中就一定存在 ,如果答案不是 ,那么肯定存在一个数字 使得 并且 ,也就是说 ,显然不成立。
这样我们只需要判断答案是否为 ,然后判断答案是否为 ,如果都不是那么答案就是 。
答案为 的时候很简单,我们只需要判断是否从 到 存在一条路径,使得这条路径上的所有边权在二进制下某一位都为 。只需要每一位建立一个并查集就可以了。
然后就是答案为 的情况了。
不难发现答案为 的时候,一定存在一个 使得 并且 。
换句话说,只要在走这一条边之前的与和大于 ,走之后与和为 就可以了,然后接下来怎么走都可以,所以这样答案与终点无关。
那么怎么得到这样一条路径呢?
显然我们需要选定一位 (不能是二进制下最低的一位!),然后从出发点走遍所有边权二进制这一位为 的边,然后我们只需要找是否存在一条边能够让与和变成 。
具体用代码实现的话需要利用前面建立的并查集,并且记录每一个点所有的出边的边权的与和 ,然后算出在同一个联通块里面的点 的与和,如果是 代表这一个联通块内的点作为出发点可以做到答案为 。
如果答案不是 也不是 ,那么答案就是 了。
代码:
#include<cstdio> #define gc getchar #define maxn 100039 using namespace std; int read(){ char c=gc(); int s=0; int flag=0; while((c<'0'||c>'9')&&c!='-') c=gc(); if(c=='-') c=gc(),flag=1; while('0'<=c&&c<='9'){ s=(s<<1)+(s<<3)+(c^48); c=gc(); } if(flag) return -s; return s; } int n,m,u,v,w,T,fa[30][maxn],f[maxn],s[maxn],flag[maxn]; int getfa(int x,int y){ if(fa[x][y]==y) return y; else return fa[x][y]=getfa(x,fa[x][y]); } int check0(){ int i; for(i=0;i<30;i++) if(getfa(i,u)==getfa(i,v)) return 1; return 0; } int main(){ n=read(); m=read(); int i,j,k; for(i=0;i<30;i++) for(j=1;j<=n;j++) fa[i][j]=j; for(i=1;i<=n;i++) f[i]=(1<<30)-1; for(i=1;i<=m;i++){ u=read(); v=read(); w=read(); f[u]&=w; f[v]&=w; for(j=0;j<30;j++) if(w&(1<<j)) fa[j][getfa(j,u)]=getfa(j,v); } for(k=1;k<30;k++){ for(i=1;i<=n;i++) s[i]=(1<<30)-1; for(i=1;i<=n;i++) s[getfa(k,i)]&=f[i]; for(i=1;i<=n;i++) if(s[getfa(k,i)]==0) flag[i]=1; } T=read(); while(T--){ u=read(); v=read(); if(check0()) puts("0"); else if(flag[u]) puts("1"); else puts("2"); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具