General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
187520751 Practice:
DaiRuiChen007
1659E - 29 C++14 (GCC 6-32) Accepted 1497 ms 26436 KB 2023-01-01 15:27:50 2023-01-01 15:27:50
→ Source
// LUOGU_RID: 98453998
#include<bits/stdc++.h> 
using namespace std;
const int MAXN=1e5+1;
inline bool bit(int x,int k) { return (x>>k)&1; }
struct DSU {
	int dsu[MAXN];
	inline void size(int n) {
		for(int i=1;i<=n;++i) dsu[i]=i;
	}
	inline int find(int x) {
		if(dsu[x]==x) return x;
		return dsu[x]=find(dsu[x]);
	}
	inline void merge(int u,int v) {
		dsu[find(u)]=find(v);
	}
	inline bool same(int u,int v) {
		return find(u)==find(v);
	}
}	G0[30],G1[30];
bool mark1[30][MAXN];
inline bool void0(int u,int v) {
	for(int k=0;k<30;++k) if(G0[k].same(u,v)) return true;
	return false;
}
inline bool void1(int u,int v) {
	if(G1[0].same(u,v)) return true;
	for(int k=1;k<30;++k) if(mark1[k][G1[k].find(u)]) return true;
	return false;
}
signed main() {
	int n,m;
	scanf("%d%d",&n,&m);
	for(int k=0;k<30;++k) G0[k].size(n),G1[k].size(n);
	for(int i=1;i<=m;++i) {
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		for(int k=0;k<30;++k) {
			if(bit(w,k)) G0[k].merge(u,v);
			if(k!=0) {
				if(bit(w,k)&&bit(w,0)) G1[k].merge(u,v);
				if(!bit(w,0)) mark1[k][u]=mark1[k][v]=true;
			} else if(!bit(w,0)) G1[k].merge(u,v);
		}
	}
	for(int i=1;i<=n;++i) for(int k=1;k<30;++k) mark1[k][G1[k].find(i)]|=mark1[k][i];
	int q;
	scanf("%d",&q);
	while(q--) {
		int u,v;
		scanf("%d%d",&u,&v);
		if(void0(u,v)) puts("0");
		else if(void1(u,v)) puts("1");
		else puts("2");
	}
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details