bzoj 1103: [POI2007]大都市meg (dfs序)
dfs序,加个bit维护前缀和就行了

type arr=record toward,next:longint; end; const maxn=500005; var edge:array[0..maxn]of arr; bit,numin,numout,first,deep:array[0..maxn]of longint; chose:array[0..maxn]of boolean; esum,tot,n,time:longint; procedure addedge(j,k:longint); begin inc(esum); edge[esum].toward:=k; edge[esum].next:=first[j]; first[j]:=esum; end; procedure dfs(x:longint); var i,too:longint; begin inc(time); numin[x]:=time; chose[x]:=false; i:=first[x]; while i>0 do begin too:=edge[i].toward; if chose[too] then begin deep[too]:=deep[x]+1; dfs(too); end; i:=edge[i].next; end; inc(time); numout[x]:=time; end; function lowbit(x:longint):longint; begin exit(x and (-x)); end; procedure add(x,y:longint); begin while x<=n<<1 do begin inc(bit[x],y); inc(x,lowbit(x)); end; end; function ask(x:longint):longint; var ans:longint; begin ans:=0; while x>=1 do begin inc(ans,bit[x]); dec(x,lowbit(x)); end; exit(ans); end; procedure into; var i,j,k:longint; begin readln(n); for i:=1 to n-1 do begin readln(j,k); addedge(j,k); addedge(k,j); end; fillchar(chose,sizeof(chose),true); deep[1]:=1; dfs(1); //for i:=1 to n do writeln(i,' ',numin[i],' ',numout[i]); for i:=2 to n do begin add(numin[i],1); add(numout[i],-1); end; end; procedure work; var i,j,m,k:longint; ch:char; begin readln(m); while m>0 do begin read(ch); if ch='W' then begin dec(m); readln(j); writeln(ask(numin[j])); end else begin readln(j,k); if deep[j]<deep[k] then j:=k; add(numin[j],-1); add(numout[j],1); end; end; end; begin into; work; end.
因疲惫而轻易入眠,是对自己一天努力的最好褒奖。 要和泪子一起努力怀抱梦想对抗残酷的现实……
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 2025成都.NET开发者Connect圆满结束
· langchain0.3教程:从0到1打造一个智能聊天机器人