题目:https://www.luogu.org/problemnew/show/P1600 看TJ:https://blog.csdn.net/clove_unique/article/details/53427248 树上差分真好. 首先要发现向上和向下的……是定值.然后想到可以差分. 本题的差分略特殊之处在于它的对象是一条连到根的链.把链上的差分值记到非根的端点上. 总之看明白TJ之后感觉真精妙. 而且 从各种中选自己需要的 只需把所有都加进桶中! #include<iostream>…
题目大意:给你一颗树,树上每个点都有一个观察员,他们仅会在 w[i] 时刻出现,观察正在跑步的玩家 一共有m个玩家,他们分别从节点 s[i] 同时出发,以每秒跑一条边的速度,沿着到 t[i] 的唯一路径向节点t[i]奔跑 如果一名玩家已经到达了终点,那么在他到达终点之后出现在终点的观察员不会观察到他 但如果在到达终点的同时观察员也出现在终点,那么观察员可以观察到他 求每个节点的观察员观察到玩家的数量 对于每个玩家的奔跑路线,可以拆成两部分 <1>向上跑,从 u 向 lca 奔跑 显然,玩家 u…
将每个人跑步的路径拆分成x->lca,lca->y两条路径分别考虑: 对于在点i的观察点,这个人(s->t)能被观察到的充要条件为: 1.直向上的路径:w[i]=dep[s]-dep[i],移项得w[i]+dep[i]=dep[s] 2.直向下的路径:w[i]=dep[s]-dep[lca]+dep[i]-dep[lca],移项得w[i]-dep[i]=dep[s]-2*dep[lca]. 问题转化为,对每个点i,统计它的子树中有多少个点x满足dep[x]=w[i]+dep[i]或dep…
传送门 题目分析: 一年前还是个傻子的时候居然直接放弃了这题. 首先列出两个方程:如果i节点的观察员能够观察到由s->t的那个人,那么: \[dep[s] - dep[i] = w[i], dep[t] - dep[i] = len - w[i]\] 整理得到:\[dep[s] = w[i] + dep[i] (1), dep[t] - len = dep[i] - w[i] (2)\] 也就是说:只要起点满足方程(1)和终点满足方程(2)的都能被i看到,下面考虑下差分:因为树的dfs是连续的,…
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 n个结点和 n−1 条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从 1 到 n 的连续正整数. 现在有 m 个玩家,第 i 个玩家的起点为 Si​ ,终点为 Ti​ .每天打卡任务开始时,所有玩家在第 0 秒同时从自己的起点出发, 以每秒跑一条边的速度, 不间断地沿…
原文链接 原题链接 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 \(n\)个结点和 \(n-1\)条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从\(1\)到\(n\)的连续正整数. 现在有\(m\)个玩家,第\(i\)个玩家的起点为 \(S_i\),终点为 \(T_i\) .每天打卡任务开始时,所有玩家在第\…
题目:https://www.luogu.org/problemnew/show/P1600 看博客:https://blog.csdn.net/clove_unique/article/details/53427248 思路好神啊... 树上差分是好东西. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;…
正解:树上差分 解题报告: 传送门$QwQ$! 这题还挺妙的,,,我想了半天才会$kk$ 首先对一条链$S-T$,考虑先将它拆成$S-LCA$和$LCA-T$,分别做.因为总体上来说差不多接下来我就只港$S-LCA$的做法了$QwQ$ 考虑对于一个观察点$j$,若要观察到玩家$i$,则有$dep_j+w_j=dep_i$.发现现在就只用统计$j$的子树内所有起点深度等于$dep_j+w_j$的就行. 显然考虑树上差分呗.就开个桶记$dep_i$,对每条路径在$S$处给$dep_S$+1,到$LC…
经过部分分的提示,我们可以把一条路径切成s到lca 和lca到t的链 这样就分为向上的链和向下的链,我们分开考虑: 向上:如果某一个链i可以对点x产生贡献,那么有deep[x]+w[x]=deep[S[i]],而且S[i]和lca[i]都在x的子树中 向下:如果某一个链i可以对点x产生贡献,那么有deep[x]-w[x]=deep[T[i]]-L[i],而且T[i]和lca[i]都在x的子树中,其中L[i]表示对应的路径的长度,即L[i]=deep[T[i]]+deep[S[i]]-2*deep…
4719: [Noip2016]天天爱跑步 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 1464  Solved: 490[Submit][Status][Discuss] Description 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.?天天爱跑步?是一个养成类游戏,需要玩家每天按时上线,完成打卡任务.这个游戏的地图可以看作一一棵包含 N个结点和N-1 条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互…