P1600 天天爱跑步

题目描述

详见:P1600 天天爱跑步

Solution

树上差分+LCA。

Code

#include<bits/stdc++.h>
using namespace std;
const int MAXN=4e5+50;
vector<int> e[MAXN];
struct wnode{int opt,x,c; };
vector<wnode> w[MAXN];
int dep[MAXN],fa[MAXN][21],Log[MAXN],cnt[2][MAXN],W[MAXN],ans[MAXN],P,n,m;
inline int read()
{int x=0,f=1; char c=getchar();while (c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
void dfs(int x,int father)
{dep[x]=dep[father]+1;fa[x][0]=father;for (int i=1;i<=Log[dep[x]];i++) fa[x][i]=fa[fa[x][i-1]][i-1];for (int i=0;i<e[x].size();i++)if (e[x][i]!=father) dfs(e[x][i],x);
}
int get_lca(int x,int y)
{if (dep[x]<dep[y]) swap(x,y);for (int i=Log[dep[x]];i>=0;i--)if (dep[fa[x][i]]>=dep[y]) x=fa[x][i];if (x==y) return x;for (int i=Log[dep[x]];i>=0;i--)if (fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];return fa[x][0];
}
void solve(int x,int father)
{ans[x]=cnt[0][W[x]+dep[x]]+cnt[1][dep[x]-W[x]+P];for (int i=0;i<w[x].size();i++) cnt[w[x][i].opt][w[x][i].x]+=w[x][i].c;for (int i=0;i<e[x].size();i++)if (e[x][i]!=father) solve(e[x][i],x);ans[x]=cnt[0][W[x]+dep[x]]+cnt[1][dep[x]-W[x]+P]-ans[x];
}
int main()
{n=read(),m=read(),P=n*3;for (int i=1;i<n;i++) {int u=read(),v=read();e[u].push_back(v);e[v].push_back(u);}for (int i=1;i<=n;i++) W[i]=read(); dep[0]=-1,Log[1]=0;for (int i=2;i<=n;i++) Log[i]=Log[i>>1]+1;dfs(1,0);for (int i=1;i<=m;i++){int u=read(),v=read(),lca=get_lca(u,v),len=dep[u]+dep[v]-dep[lca]*2;w[u].push_back((wnode){0,dep[u],1});w[v].push_back((wnode){1,dep[v]-len+P,1});w[lca].push_back((wnode){0,dep[u],-1});w[fa[lca][0]].push_back((wnode){1,dep[v]-len+P,-1});}solve(1,0);for (int i=1;i<=n;i++) printf("%d ",ans[i]);return 0;
}

P1600 天天爱跑步相关推荐

  1. [luogu]P1600 天天爱跑步[LCA]

    [luogu]P1600 [NOIP 2016]天天爱跑步 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上 ...

  2. luogu P1600 天天爱跑步

    题面传送门 这道题目蛮好的. 首先暴力不可取,会TTT 考虑分类讨论,把一段路径分为上行与下行. 设dxd_xdx​为xxx节点的深度,则在上行时被观察到当且仅当dv+tv=dud_v+t_v=d_u ...

  3. [FROM LUOGU]P1600 【NOIP2016DAY1T2】天天爱跑步

    P1600 天天爱跑步 题面 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏 ...

  4. 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】

    P1600 天天爱跑步 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个 ...

  5. luoguP1600 天天爱跑步(NOIP2016)(主席树+树链剖分)

    阅读体验: https://zybuluo.com/Junlier/note/1303550 为什么这一篇的Markdown炸了? # 天天爱跑步题解(Noip2016)(桶+树上差分 ^ 树剖+主席 ...

  6. NOIP2016·洛谷·天天爱跑步

    初见安~这里是传送门:洛谷P1600 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打 ...

  7. NOIP2016天天爱跑步

    NOIP2016天天爱跑步 这题一看显然lca+树上差分,但是因为有w的限制不能直接加,所以考虑权值线段树合并, 每个选手的起点终点对于不同的节点的影响是不同的,这就非常麻烦了,但是可以发现无论如何他 ...

  8. Noip2016day1 天天爱跑步running

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点 ...

  9. NOIP2016天天爱跑步 题解报告【lca+树上统计(桶)】

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nn个 ...

最新文章

  1. 后摩尔定律时代的芯片新选择!
  2. Python学习第四天----Linux之用户与用户组权限
  3. windows怎么下载安装python-windows下numpy下载与安装图文教程
  4. java《算法》第四版一些API方法笔记
  5. Thread类学习(一)
  6. 机器学习的几种方法(knn,逻辑回归,SVM,决策树,随机森林,极限随机树,集成学习,Adaboost,GBDT)
  7. linux拷贝到新建文件夹命令行,Linux创建文件touch,复制文件cp,tab补全,链接文件ln命令...
  8. php写时间 自动,ThinkPHP6.0 自动写入时间戳
  9. 渗透测试攻击(一)Arp中间人攻击 伪装网关 截获 上网信息用户名密码
  10. springboot,hibernate,exception no session 问题解决
  11. LaTex中编译时出现“ Undefined control sequence”问题
  12. 项目设计----会员充值(基础)
  13. C#删掉了发给lua的对象造成lua实际的Obj无效,解决办法
  14. 查看jdk版本号和安装目录
  15. php eclipse 版本_PHPEclipse官方下载
  16. 如何double你的能力
  17. SQL Developer连接时报错:ORA-12528
  18. 如何用AI做一个好看的图案
  19. 【IEEE-CPS出版,往届已检索】第二届计算机图形学、图像与虚拟化研究国际会议(ICCGIV 2022)
  20. 笔记:Inductive Robust Principal Component Analysis

热门文章

  1. 世界上最欢乐的职业,可能就是蹦极的工作人员了!
  2. 每日一笑 | 老板,黑凤梨真的能吃吗?
  3. html设置样式不继承_web前端入门到实战:css的核心原理分为优先级原则与继承原则两大部分...
  4. mysql判断表存在的sql语句_SQL 语句判断已知表是否存在_MySQL
  5. gif分解工具_Python之GIF图倒放,沙雕快乐源泉
  6. php sorcket_PHP: Sockets - Manual
  7. 晶振噪声及杂散_晶振如何匹配电容看了就知道
  8. 什么事计算机事实性知识,《人工智能》复习要点
  9. [Spring5]IOC容器_Bean管理注解方式_注入属性@Autowired_@Qualified_@Resource_@Value
  10. [JavaWeb-MySQL]多表查询概述