P1600 天天爱跑步】的更多相关文章

待填坑 Code //Luogu P1600 天天爱跑步 //Apr,4th,2018 //树上差分+LCA #include<iostream> #include<cstdio> #include<vector> using namespace std; long long read() { long long x=0,f=1; char c=getchar(); while(!isdigit(c)){if(c=='-') f=-1;c=getchar();} whi…
[luogu]P1600 [NOIP 2016]天天爱跑步 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含n个结点和n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从1到n的连续正整数. 现在有m个玩家,第i个玩家的起点为Si​,终点为Ti​ .每天打卡任务开始时,所有玩家在第0秒同时从自己的起点出发, 以每秒跑一条边的速…
小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nn个结点和 n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从11到nn的连续正整数. 现在有mm个玩家,第ii个玩家的起点为 S_iS i​ ,终点为 T_iT i​ .每天打卡任务开始时,所有玩家在第00秒同时从自己的起点出发, 以每秒跑一条边的速度, 不间断地…
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nn个结点和 n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从11到nn的连续正整数. 现在有mm个玩家,第ii个玩家的起点为 S_iSi,终点为 T_iTi .每天打卡任务开始时,所有玩家在第00秒同时从自己的起点出发, 以每秒跑一条边的速度, 不间断地…
https://www.luogu.org/problemnew/show/P1600 (仅做记录) 自己的假方法: 每一次跑从a到b:设l=lca(a,b)对于以下产生贡献: a到l的链上所有的点(x)满足dep[x]+w[x]==dep[a] l到b的链上(不含l)所有的点(x)满足dep[x]-dep[l]+dep[a]-dep[l]==w[x]即dep[x]-w[x]==2*dep[l]-dep[a] 于是每一个点记两个map<int,int>,其中键值对(p,q)表示 “从该点到根的…
题目: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;…
来一发清新的80行 树剖 $LCA$ + 树上差分 题解. -----from Judge 本题题意大概是给出一棵 n 个节点的树以及 m 条有向路径, 并且每个点 i 都有一个权值 $w[i]$,如果某条路径包含了 i 号节点,并且 i 号节点是该路径上的第 $w[i]$ 个节点的话就会对答案产生贡献. 考虑暴力做法 我们可以十分理所当然的想到一个暴力: u 和 v 向上跑,沿路判断条件并累加,直到跑到 $LCA$ . 但是这个暴力的时间复杂度太高了: $O (n + m )$ .于是我们考虑…
天天放毒... 首先介绍一个树上差分. 每次进入的时候记录贡献,跟出来的时候的差值就是子树贡献. 然后就可以做了. 发现考虑每个人的贡献有困难. 于是考虑每个观察员的答案. 把路径拆成两条,以lca分开.x -> z -> y,完全分成A,B两部分. 那么A:d[x] = w[z] + d[z];B:len - d[y] + N = w[z] - d[z] + N; 这里+ N是为了防止负数. 然后发现右边只跟z有关,这里的z可以是路径上任一点. 那么对于每个人,把需要树上差分统计的左边数值用…
传送门 1A此题暴祭 (下面记点\(x\)深度为\(de_x\),某个时间点记为\(w_x\)) 首先,每条路径是可以拆成往上和往下两条路径的 对于往上的路径,假设有个人往上跑,\(w_y\)在点\(y\),那么如果能对点\(x\)的观察员产生贡献,当且仅当\(w_x+de_x=w_y+de_y\) 对于往下的路径,假设有个人往下跑,\(w_y\)在点\(y\),那么如果能对点\(x\)的观察员产生贡献,当且仅当\(w_x-de_x=w_y-de_y\) 所以对于每个点开两个线段树,每个下表存\…
lca真心不太会,这里只介绍60分做法,100的太难辣简单了就不介绍了 n<=1000 zz回溯爆搜 S[i]全部相等 这dfs序都不用lca的,2333,差分,然后输出判断一下是否是0(1到i的时间是固定的) 退化成一条链子 一个点i的ans就是i-time[i]和i+tim[i]的起点个数(当然要合法啦) 乱搞就好了,这里写的nlogn的 #include <iostream> #include <queue> #include <cstdio> #inclu…