A. Web of Lies

https://codeforces.com/contest/1548/problem/A

题意:n个点m条边,q个询问:可能会加边,减边,或者询问。询问指删除所有符合条件的点,条件指当前点有至少一条边,并且当前点小于所有相邻的点。

思路:如果当前点从孤立到被加到了某个更大的点中,那么当前点一定会被删除,ans--。如果当前点从1条边变为0条边,则当前点保住了,ans++。

inline void solve() {
	int n, m;
	cin >> n >> m;

	int ans = n;
	vector<int> cnt(n + 1);
	for (int i = 0; i < m; ++i) {
		int u, v;
		cin >> u >> v;
		if (u > v){ 
			swap(u, v);
		}
		if (cnt[u] == 0) {
			ans --;
		}
		cnt[u] ++;
	}

	int q;
	cin >> q;
	while (q --) {
		int x;
		cin >> x;
		if (x == 3) {
			cout << ans << '\n';
		}
		else {
			int u, v;
			cin >> u >> v;
			if (u > v) {
				swap(u, v);
			}
			if (x == 1) {
				if (cnt[u] == 0) {
					ans --;
				}
				cnt[u] ++;
			}
			else {
				if (cnt[u] == 1) {
					ans ++;
				}
				cnt[u] --;
			}
		}
	}
}
posted @ 2025-04-08 17:34  _Yxc  阅读(11)  评论(0)    收藏  举报