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] --;
}
}
}
}

浙公网安备 33010602011771号