异或图
思路:
简单推一下:
当 时:
要满足
当 时:
时
且存在
时
这样显然可以直接用 。
此题的坑点是很容易超时,要用快读,而且牛客的评测机快读也容易超时,相同的代码,我交两遍一份 ,一份超时。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
int a[N];
inline void read(int &x){
x=0;int w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
for(;ch>='0'&&ch<='9';ch=getchar())
x=(x<<3)+(x<<1)+(ch&15);
x*=w;
}
unordered_map<int,bool>mp;
int main(){
int n,q;
read(n),read(q);
for(int i=1,x;i<=n;i++) read(a[i]),mp[a[i]]=1;
while(q--){
int k,x,y;
read(k),read(x),read(y);
if((a[x]^a[y])==k) printf("1\n");
else if(a[x]==a[y]&&mp[a[x]^k]) printf("2\n");
else printf("-1\n");
}
return 0;
}