60pts求助
查看原帖
60pts求助
1200191
orangeSteve_dev楼主2025/1/25 23:54
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll M = (ll)5e5 + 5;
ll r[M], w[M], g[M];
int n, m ,q;
int main() {
	cin>>n>>m;
	mt19937 rng(time(0));
	for (int u = 1; u <= n; ++u) {
		w[u] = rng();
	}
	ll suijishu = accumulate(w + 1, w + n + 1, 0LL);
	ll now = 0;
	while (m--) {
		int u, v;
		cin>>u>>v;
		r[v] += w[u];
		g[v] = r[v];
		now += w[u];
	}
	cin>>q;
	while (q--) {
		int t;
		cin>>t;
		if (t == 1) {
			ll u, v;
			cin>>u>>v;
			r[v] -= w[u];
			now -= w[u];
		} else if (t == 2) {
			ll v;
			cin>>v;
			now -= r[v];
			r[v] = 0;
		} else if (t == 3) {
			ll u, v;
			cin>>u>>v;
			r[v] += w[u];
			now += w[u];
		} else if (t == 4) {
			ll v;
			cin>>v;
			now += g[v] - r[v];
			r[v] = g[v];
		}
		cout<<(now == suijishu ? "YES" : "NO")<<"\n";
	}
	return 0;
}
2025/1/25 23:54
加载中...