[ABC302E] Isolation 题解
FReQuenter · · 题解
我们可以使用 map 记录点 mp。对于答案,我们维护一个变量
对于操作 mp[u][v] 和 mp[v][u] 都设为 mp[u] 为空,则 mp[v] 为空,则
对于操作 mp[u][v]=0,mp[v].clear()。答案统计一下周围点变成孤立点的数量。别忘了当前点。
复杂度分析:每一次操作
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
map<int,bool> mp[300005];
signed main(){
int n,q;
cin>>n>>q;
int sum=n;
while(q--){
int op;
cin>>op;
if(op==1){
int u,v;
cin>>u>>v;
if(!mp[u].size()) sum--;
if(!mp[v].size()) sum--;
mp[u][v]=1;
mp[v][u]=1;
}
else{
int v;
cin>>v;
if(mp[v].size()) sum++;
for(auto nx:mp[v]){
mp[nx.fi].erase(v);
if(!mp[nx.fi].size()) sum++;
}
mp[v].clear();
}
cout<<sum<<'\n';
}
}