洛谷4092 树
题目:https://www.luogu.org/problemnew/show/P4092
也考虑过离线。但没有想到倒序会很方便。
题解:考虑记录每个点的最近标记祖先。
对于离标记点很远的点,岂不是要慢慢找过去?
所以想到可以路径压缩的并查集。
并查集在此题中的特点是删点很容易,删x就是把fa[x]=x改成fa[x]=(x的直接父亲),所以可以倒序离线!
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=100005; int n,q,fa[N],cz[N],ans[N],ff[N],cnt[N],ct; bool b[N]; int find(int a) { if(fa[a]==a)return a; return fa[a]=find(fa[a]); } int main() { scanf("%d%d",&n,&q); int x,y;char ch; for(int i=1;i<n;i++) { scanf("%d%d",&x,&y); ff[y]=x; } for(int i=1;i<=q;i++) { scanf(" %c%d",&ch,&x); cz[i]=x;b[i]=(ch=='C'); if(b[i])fa[x]=x,cnt[x]++; } fa[1]=1;ff[1]=1; for(int i=2;i<=n;i++)if(!fa[i])fa[i]=ff[i]; for(int i=q;i;i--) { int k=cz[i]; if(b[i]&&!--cnt[k])fa[k]=ff[k]; if(!b[i])ans[++ct]=find(k); } for(int i=ct;i;i--)printf("%d\n",ans[i]); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· .NET 9 new features-C#13新的锁类型和语义
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 《SpringBoot》EasyExcel实现百万数据的导入导出