社区讨论

问几个问题

P1600[NOIP 2016 提高组] 天天爱跑步参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo11gkrk
此快照首次捕获于
2023/10/22 13:39
2 年前
此快照最后确认于
2023/11/02 13:09
2 年前
查看原帖
1.关于本题推的式子:
dep[s]2dep[lca]=w[j]dep[j]dep[s]-2dep[lca]=w[j]-dep[j]
我在每条路径输入后是这么写的;
CPP
modify(rt[t],-n,n,(dep[s]-dep[lca]-dep[lca]),1);
		modify(rt[fa[lca]],-n,n,(dep[s]-dep[lca]-dep[lca]),-1);
然后在线段树合并后这么查询:
CPP
if(w[u])ans[u]+=query(rt[u],-n,n,w[u]+dep[u]);
	ans[u]+=query(rt[u],-n,n,(w[u]-dep[u]));
而当我把以上两段改成这样就对了:
CPP
modify(rt[t],-n,n,-(dep[s]-dep[lca]-dep[lca]),1);
		modify(rt[fa[lca]],-n,n,-(dep[s]-dep[lca]-dep[lca]),-1);
if(w[u])ans[u]+=query(rt[u],-n,n,w[u]+dep[u]);
	ans[u]+=query(rt[u],-n,n,-(w[u]-dep[u]));
这是为什么呢?
然后还有
if(w[u])ans[u]+=query(rt[u],-n,n,w[u]+dep[u]);
一句中为什么要判 w[u]!=0
我好像不是很懂,望大佬讲讲。

回复

6 条回复,欢迎继续交流。

正在加载回复...