首页 > 其他分享 >coderforces E - AND-MEX Walk

coderforces E - AND-MEX Walk

时间:2023-02-05 13:44:56浏览次数:57  
标签:... int coderforces tc 一位 一排 二进制 Walk MEX

很好的题

[

观察样例发现只有0,1,2

大胆猜测是不是也只会有0,1,2

如果不是的话说明某条路径上出现过0,1,2,且是以2,1,0的情况出现的

但是2的末尾是0,和1&不可能得到1,所以假设不成立

]

然后考虑什么时候有0

有0的充分必要条件是对于二进制的每一位,都有一个地方出现一个0

相反的,就是二进制的每一位,至少有一位全是1

对于二进制的每一位建图,如果该边在这位上为1就连接两点

因为我们只考虑连通性所以用并查集维护就可以,开31个并查集:)

然后考虑什么时候有1

有1就是有0但是没有1(?)

要知道前缀和&有个性质——非严格递减

脑补一下前缀和的趋势应该是[一排大于1的数]...[0,0,0,0,0]

这说明在前j位(j>0,下标从0开始)至少有一排全为1[这样能保证前面有的数>1]

那第0位呐?一定要走到边权末位是0的某条边,才能让0出现

为什么0一定会出现?前面已经判掉了没有0的情况了,所以二进制每一位都不会全是1。

做法就把判0的图拿来用,对于j位(1~31),预处理一个虚点处理“走到边权末位是0的某条边”

这样就能保证[一排大于1的数]...[0,0,0,0,0]

ps,二进制建图还蛮有意思的

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct DSU{
	int fa[maxn];
	DSU(){
		for(int i=1;i<maxn;i++) fa[i]=i;
	}// 默认构造 
	int find(int x){
		if(fa[x]!=x) return fa[x]=find(fa[x]);
		else return x;
	}
	void merge(int x,int y){
		int fx=find(x),fy=find(y);
		fa[fx]=fy;
	}
	bool query(int x,int y){
		if(find(x)==find(y)) return true;
		else return false;
	}
}x[35],y[35];
bool mark[maxn];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;long long w;
		cin>>a>>b>>w;
		for(int j=0;j<=31;j++){
			if(w>>j&1){
				x[j].merge(a,b);
			}
			if(w%2==0){
				mark[a]=mark[b]=true;
			}
		}
	}
	for(int j=0;j<=31;j++){
		y[j].fa[n+1]=n+1;
		y[j]=x[j];
		for(int i=1;i<=n;i++)
		 if(mark[i]) y[j].merge(n+1,i);
	}
	int q;
	cin>>q;
	for(int tc=1;tc<=q;tc++){
		bool over=false;
		int a,b;cin>>a>>b;
		for(int j=0;j<=31;j++){
			if(x[j].query(a,b)==true){
				cout<<0<<endl;
				over=true;
				break;
			}
		}
		if(over) continue;
		for(int j=1;j<=31;j++){
			if(y[j].query(a,n+1)){
				cout<<1<<endl;
				over=true;
				break;
			}
		}
		if(!over){
			cout<<2<<endl;
		}
	}
}

  

标签:...,int,coderforces,tc,一位,一排,二进制,Walk,MEX
From: https://www.cnblogs.com/liyishui2003/p/17093282.html

相关文章

  • 【AT_dp_r】Walk
    又是简单题。我们知道弗洛伊德可以求解传递闭包。我们有矩阵\(M\),我们给\(M_{k,i,j}\)定义为\(i\toj\)长度为\(k\)的路径数,细想不难发现有转移:\(M_{k,i,j}=\su......
  • 【转载】APM——SkyWalking 是什么
    原文地址:1、https://zhuanlan.zhihu.com/p/3615792942、https://www.cnblogs.com/itxiaoshen/p/16513711.htmlgithub:  https://skywalking.apache.org/一、SkyWalki......
  • 【分布式链路追踪】Skywalking分布式链路追踪基于Docker安装与使用
    1.服务监控三要素[1]服务监控需要满足的三要素分别如下:日志监控指标监控请求链路追踪服务监控只要能满足这三个要素,基本就能实现我们想要的监控效果。1.1.主流APM......
  • DeepWalk Online Learning of Social Representations
    DeepWalk:OnlineLearningofSocialRepresentations论文信息作者:来源于纽约州立大学石溪分校,一个很有名的学校。辅助资料视频带读DeepWalk【图神经网络论文精......
  • Codeforces Round #548 (Div. 2) E. Maximize Mex 二分图+逆向加边
    题意:有n个学生,m个社团,每个学生只属于一个社团。在接下来的d天内每天会离开一个学生(再也回不来了)。现要从剩下的每个社团中挑选一个学生组成team,并最大化他们的mex。 ......
  • BZOJ 1852 [MexicoOI06] 最长不下降序列
    https://darkbzoj.cc/problem/1852首先解决初始排序的问题:先把\(i,j\)对应的两组数\((a_i,b_i),(a_j,b_j)\)分为“必要”,“非必要”两类。“必要”,指\(i\)必须......
  • LCM Walk HDU - 5584
    https://vjudge.net/problem/HDU-5584题意:(x,y)可以走到(x+lcm(x,y),y),或(x,y+lcm(x,y))给定终点(ex,ey),问从起点到终点走了多少步?解:先按照题意模拟:设d=gcd(x,y),则再设......
  • 【SpringApplication】源码之【StackWalker】
     问题:SpringBoot是如何找到main方法的启动类的?  我们在SpringApplication275行看到有一个“探测Main”的方法,其中他使用了Java9的新特性:StackWalker。图1StackW......
  • CF1364C-Ehab and Prefix MEXs
    a[i]<=i,否则当a[i]>i时,需要1~i项有数字0~a[i]-1,这一共是a[i]个数字,而1~i项只有i个数字,需要的比拥有的数字多,不成立当a[i]!=a[i-1]时,说明Mex改变了,那么需要b[i]为a[i-1]才......
  • android studio 报错com.android.build.api.transform.TransformException: java.lang
    报错com.android.build.api.transform.TransformException:java.lang.RuntimeException或者其他一些出现gradle报错字样,这是因为部分第三方库需要较高gradle版本才能跑起......