哈希 45pts 求调(不是全部输出 NO)
查看原帖
哈希 45pts 求调(不是全部输出 NO)
685964
shuqiang楼主2025/7/11 15:53
#include<iostream>

using namespace std;

const int N = 5e5 + 10, mod = 998244353;
int n, m, q, u, v, op, hsu[N], hsv[N], hss[N], nhs = 0, whs;

int main(){
	cin >> n >> m;
	hsu[1] = whs = rand();
	for(int i = 2; i <= n; i++){
		hsu[i] = rand();
		whs = (whs + hsu[i]) % mod;
	}
	while(m--){
		cin >> u >> v;
		hsv[v] = (hsu[u] + hsv[v]) % mod;
		nhs = (hsu[u] + nhs) % mod;
	}
	for(int i = 1; i <= n; i++){
		hss[i] = hsv[i];
	}
	cin >> q;
	while(q--){
		cin >> op >> u;
		if(op == 1){
			cin >> v;
			hsv[v] = ((hsv[v] - hsu[u]) % mod + mod) % mod;
			nhs = ((nhs - hsu[u]) % mod + mod) % mod;
		}
		else if(op == 2){
			nhs = ((nhs - hsv[u]) % mod + mod) % mod;
			hsv[u] = 0;
		}
		else if(op == 3){
			cin >> v;
			hsv[v] = (hsv[v] + hsu[u]) % mod;
			nhs = (nhs + hsu[u]) % mod;
		}
		else{
			nhs = (nhs + hss[u] - hsv[u]) % mod;
			hsv[u] = hss[u];
		}
		if(whs == nhs) cout << "YES\n";
		else cout << "NO\n";
	}
	return 0;
}
2025/7/11 15:53
加载中...