RT,为何本题异或 hash 写了 9 重也过不了?
/*------------------------------*/
/* Author: BreakPlus */
/* Email: breakplus@foxmail.com */
/*------------------------------*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
typedef pair<pair<ll,ll>,ll> P3;
typedef pair<pair<ll,ll>,pair<ll,ll> >P4;
#define mkp make_pair
#define fi first
#define se second
//#define FastIO
//#define OIcontest
const ll mod=998244353;
const ll maxn=500005;
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll maxx(ll a,ll b){ return a>b?a:b; }
inline ll minn(ll a,ll b){ return a<b?a:b; }
inline ll lowbit(ll x){ return x&-x; }
inline ll qpow(ll a,ll b){
ll ans=1, base=a;
while(b){
if(b&1) ans=ans*base%mod;
base=base*base%mod;
b>>=1;
}
return ans;
}
struct Comb{
ll fac[maxn], inv[maxn];
Comb(){
fac[0]=1;
for(ll i=1;i<=maxn-5;i++) fac[i]=fac[i-1]*i%mod;
inv[maxn-5]=qpow(fac[maxn-5],mod-2);
for(ll i=maxn-6;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}
ll C(ll a,ll b){
if(a<0 || b<0) return 0;
if(a<b) return 0;
return fac[a]*inv[b]%mod*inv[a-b]%mod;
}
}comb;
/*--------------head------------------*/
void init(){
}
ll n,m;
ll num1[maxn],num2[maxn],num3[maxn],num4[maxn],num5[maxn],num6[maxn],num7[maxn],num8[maxn],num9[maxn];
ll rl1[maxn],rl2[maxn],rl3[maxn],rl4[maxn],rl5[maxn],rl6[maxn],rl7[maxn],rl8[maxn],rl9[maxn];
ll w1[maxn],w2[maxn],w3[maxn],w4[maxn],w5[maxn],w6[maxn],w7[maxn],w8[maxn],w9[maxn];
ll tw1,tw2,tw3,tw4,tw5,tw6,tw7,tw8,tw9;
mt19937 rnd(233);
void solve(){
// srand(time(0));
n=read(), m=read();
// tw = time(0);
for(ll i=1;i<n;i++){
w1[i] = (rnd()+1), tw1 ^= w1[i];
w2[i] = (rnd()+2), tw2 ^= w2[i];
w3[i] = (rnd()+3), tw3 ^= w3[i];
w4[i] = (rnd()+4), tw4 ^= w4[i];
w5[i] = (rnd()+5), tw5 ^= w5[i];
w6[i] = (rnd()+6), tw6 ^= w6[i];
w7[i] = (rnd()+7), tw7 ^= w7[i];
w8[i] = (rnd()+8), tw8 ^= w8[i];
w9[i] = (rnd()+9), tw9 ^= w9[i];
}
w1[n] = tw1;
w2[n] = tw2;
w3[n] = tw3;
w4[n] = tw4;
w5[n] = tw5;
w6[n] = tw6;
w7[n] = tw7;
w8[n] = tw8;
w9[n] = tw9;
ll q , ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0, ans5 = 0, ans6 = 0, ans7 = 0, ans8 = 0, ans9 = 0;
for(ll i=1;i<=m;i++){
ll u=read(), v=read();
num1[v] ^= w1[u], ans1 ^= w1[u];
num2[v] ^= w2[u], ans2 ^= w2[u];
num3[v] ^= w3[u], ans3 ^= w3[u];
num4[v] ^= w4[u], ans4 ^= w4[u];
num5[v] ^= w5[u], ans5 ^= w5[u];
num6[v] ^= w6[u], ans6 ^= w6[u];
num7[v] ^= w7[u], ans7 ^= w7[u];
num8[v] ^= w8[u], ans8 ^= w8[u];
num9[v] ^= w9[u], ans9 ^= w9[u];
rl1[v] = num1[v];
rl2[v] = num2[v];
rl3[v] = num3[v];
rl4[v] = num4[v];
rl5[v] = num5[v];
rl6[v] = num6[v];
rl7[v] = num7[v];
rl8[v] = num8[v];
rl9[v] = num9[v];
}
q=read();
while(q--){
ll t=read(),u,v;
if(t==1 || t==3){
u=read(), v=read();
rl1[v] ^= w1[u];
rl2[v] ^= w2[u];
rl3[v] ^= w3[u];
rl4[v] ^= w4[u];
rl5[v] ^= w5[u];
rl6[v] ^= w6[u];
rl7[v] ^= w7[u];
rl8[v] ^= w8[u];
rl9[v] ^= w9[u];
ans1 ^= w1[u];
ans2 ^= w2[u];
ans3 ^= w3[u];
ans4 ^= w4[u];
ans5 ^= w5[u];
ans6 ^= w6[u];
ans7 ^= w7[u];
ans8 ^= w8[u];
ans9 ^= w9[u];
}
else if(t==2){
u=read();
ans1 ^= rl1[u], ans2 ^= rl2[u], ans3 ^= rl3[u];
ans4 ^= rl4[u], ans5 ^= rl5[u], ans6 ^= rl6[u];
ans7 ^= rl7[u], ans8 ^= rl8[u], ans9 ^= rl9[u];
rl1[u] = rl2[u] = rl3[u] = 0;
rl4[u] = rl5[u] = rl6[u] = 0;
rl7[u] = rl8[u] = rl9[u] = 0;
}
else if(t==4){
u=read();
ans1 ^= rl1[u], ans2 ^= rl2[u], ans3 ^= rl3[u];
ans4 ^= rl4[u], ans5 ^= rl5[u], ans6 ^= rl6[u];
ans7 ^= rl7[u], ans8 ^= rl8[u], ans9 ^= rl9[u];
rl1[u] = num1[u], rl2[u] = num2[u], rl3[u] = num3[u];
rl4[u] = num4[u], rl5[u] = num5[u], rl6[u] = num6[u];
rl7[u] = num7[u], rl8[u] = num8[u], rl9[u] = num9[u];
ans1 ^= num1[u], ans2 ^= num2[u], ans3 ^= num3[u];
ans4 ^= num4[u], ans5 ^= num5[u], ans6 ^= num6[u];
ans7 ^= num7[u], ans8 ^= num8[u], ans9 ^= num9[u];
}
if(!ans1 && !ans2 && !ans3 && !ans4 && !ans5 && !ans6 && !ans7 && !ans8 && !ans9)
puts("YES");
else puts("NO");
}
}
int main(){
#ifdef OIcontest
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
#ifdef FastIO
ios::sync_with_stdio(0); cin.tie(0), cout.tie(0);
#endif
init();
ll T=1;
while(T--) solve();
return 0;
}