25pts 暴力求调悬赏1关
查看原帖
25pts 暴力求调悬赏1关
799877
AK_heaven楼主2023/10/20 14:01
#include <bits/stdc++.h>

using namespace std;
#define int long long
const int maxn = 5e5 + 100;
int n, m, q;
int head[maxn], cnt;
struct E {
	int u, v, last;
}e[maxn<<2];
int d[maxn];
void add(int u, int v) {
	e[++cnt].u = u;
	e[cnt].v = v;
	e[cnt].last = head[u];
	head[u] = cnt;
}
bool broken[maxn<<2];
signed main() {
	cin >> n >> m;
	int u, v;
	while(m--) {
		cin >> u >> v;
		add(u, v); d[u]++;
	}
	cin >> q;int op;
	while(q--) {
		cin >> op;
		if(op == 1) {
			cin >> u >> v;
			for(int i = head[u]; i; i = e[i].last)
			  if(e[i].u == u && e[i].v == v) {
			  	broken[i] = 1, d[u]--;
			  	break;
			  }
		}
		if(op == 2) {
			cin >> u;
			for(int i = head[u]; i; i = e[i].last) {
				if(!broken[i]) {
					d[u]--;
					broken[i] = 1;
				}
			}
		}
		if(op == 3) {
			cin >> u >> v;
			for(int i = head[u]; i; i = e[i].last) {
				if(e[i].u == u && e[i].v == v) {
					broken[i] = 0;
					d[u]++;
					cout << "wdfa" << endl;
				}
			}
		}
		if(op == 4) {
			cin >> u;
			for(int i = head[u]; i; i = e[i].last) {
				if(broken[i]) {
					broken[i] = 0;
					d[u]++;
				}
			}
		}
		bool f = 1;
		for(int i = 1; i <= n; i++) {
			if(d[i] != 1) {
//				for(int j = 1; j <= n; j++) {
//					cout << j << " " << d[j] << endl;
//				}
				cout << "NO" << endl;
				f = 0;
				break;
			}
		}
		if(f) cout << "YES" << endl;
	}
	return 0;
}
2023/10/20 14:01
加载中...