牛客练习赛70 D.数树 (模拟,STL)

-
题意:每次有\(3\)中操作,对两个点连条边,删去某条边,或者问当前大小不为\(1\)的树的数量.连重边或者删去一条不存在的边,这样的白痴操作可以无视qwq.
-
题解:水题,用map存一下pair然后分论讨论即可.
-
代码:
int n; ll u,v; map<PLL,bool> mp; map<ll,ll> son; ll res; int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n; for(int i=1;i<=n;++i){ int op; cin>>op; if(op==3) cout<<res<<endl; else if(op==1){ cin>>u>>v; if(u>v) swap(u,v); if(mp[{u,v}]) continue; mp[{u,v}]=true; if(son[u]==0 && son[v]==0) res++; else if(son[u]!=0 && son[v]!=0) res--; son[u]++; son[v]++; } else{ cin>>u>>v; if(u>v) swap(u,v); if(!mp[{u,v}]) continue; mp[{u,v}]=false; if(son[u]!=1 && son[v]!=1) res++; else if(son[u]==1 && son[v]==1) res--; son[u]--; son[v]--; } } return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号