题目链接:QAQ

题目大意:给出一棵n个点的树,每个点上有\(C_i\)头牛,问每个点k步范围内各有多少头牛。

Solution:

首先看看数据范围,\(n\le1e5,k\le20\),那我们可以尝试设\(f[n][k]\)

设\(d[i][j]\)表示从i点开始向下k的范围内有多少头牛,\(f[i][j]\)代表从i点开始j范围内有多少头牛

\(d[i][j]\)可以很容易算出来,对于一个点\(u\),\(d[u][j]=C_u+\sum_{v\in son_u}d[v][j-1]\)

而\(f[i][j]\)也可以得出,\(f[v][j]=f[fa[v]][j-1]-d[v][j-2]+d[v][j]\)

最后输出\(f[i][k]\)就行了

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,k,cnt,head[N];
int a[N],d[N][21],f[N][21];
struct Edge{int nxt,to;}edge[N<<1];
void ins(int x,int y){edge[++cnt].nxt=head[x];edge[cnt].to=y;head[x]=cnt;
}
void dfs(int x,int fa,int u){d[x][u]+=a[x];for(int i=head[x];i;i=edge[i].nxt){int y=edge[i].to;if(y==fa) continue;d[x][u]+=d[y][u-1];dfs(y,x,u);}
}
void calc(int x,int fa,int u){int w=u-2>=0?d[x][u-2]:0;f[x][u]=f[fa][u-1]-w+d[x][u];for(int i=head[x];i;i=edge[i].nxt)if(edge[i].to!=fa) calc(edge[i].to,x,u);
}
void work(int u){for(int i=head[1];i;i=edge[i].nxt)calc(edge[i].to,1,u);
}
int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}return x*f;
}
int main(){n=read(),k=read();for(int i=1;i<n;i++){int x=read(),y=read();ins(x,y),ins(y,x);}for(int i=1;i<=n;i++)a[i]=read(),d[i][0]=a[i];if(!k){for(int i=1;i<=n;i++)printf("%d\n",a[i]);return 0;}for(int i=1;i<=k;i++) dfs(1,0,i),f[1][i]=d[1][i];for(int i=1;i<=n;i++) f[i][0]=a[i];for(int i=1;i<=k;i++) work(i);for(int i=1;i<=n;i++) printf("%d\n",f[i][k]);return 0;
}

转载于:https://www.cnblogs.com/NLDQY/p/11117911.html

[USACO12FEB]附近的牛Nearby Cows相关推荐

  1. P3047 [USACO12FEB]附近的牛Nearby Cows

    题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...

  2. 洛谷P2017 [USACO09DEC]晕牛Dizzy Cows [拓扑排序]

    题目传送门 晕牛Dizzy Cows 题目背景 Hzwer 神犇最近又征服了一个国家,然后接下来却也遇见了一个难题. 题目描述 The cows have taken to racing each o ...

  3. USACO12FEB Nearby Cows

    完全没有思路,看了题解还有些迷 设f[i][j]表示和节点\(i\)距离为\(j\)的节点的总数,\(son\)为\(i\)的儿子,\(num\)为儿子的数量 则转移方程为f[i][j] = f[s] ...

  4. P2017 [USACO09DEC]晕牛Dizzy Cows

    图论日常不会系列... 题意:给定有向边和无向边,然后给每一条无向边定向,使得到的图无环. 我本来想缩一下点的,但是越想越晕. 然后就翻了题解,恍然大悟... 其实只需要给只有有向边的图跑一次topo ...

  5. linux删除多余日志,linux 删除日志

    https://jingyan.baidu.com/album/c1a3101e73129ade656deb9d.html?picindex=2 里面的 ls -s 可以看到目录 https://zh ...

  6. USACO Clumsy Cows

    洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows 洛谷传送门 JDOJ 2323: USACO 2012 Nov Silver 1.Clumsy Cows JDOJ传送门 Desc ...

  7. cocos creator小游戏案例之趣味套牛

    趣味套牛 0. 思路 搭建基本背景 奔跑的牛 套牛的绳子 套牛成功的判定 结算 重新开始 特效,(音效,粒子) 1. 基本背景 按钮 添加 button 组件 transition: sprite 2 ...

  8. NOIP复健计划——动态规划

    树形DP [POI2011] DYN-Dynamite 二分 K K K check(mid): 能否选出 m m m个点,使得 ∀ i 为关键点, M i n j i s s e l e c t e ...

  9. 动态规划--from zpz

    版权声明:copy from zpz,我可能要修改 https://blog.csdn.net/qq_40828060/article/details/83064425 文章目录 前言 记忆化搜索 动 ...

  10. 动态规划,且学且放弃

    文章目录 前言 记忆化搜索 动态规划的基本解题思路 背包问题 01背包 (待处理)P1489 猫狗大战 01背包的空间优化问题 P1048 采药 P1510 精卫填海 P1566 加等式 P1504 ...

最新文章

  1. flink 自定义 窗口_Flink入门实战 (下)
  2. 推荐 | 几个最有价值的科研学术类资源
  3. IDEA_Spring Data JPA有关报错Cannot resolve table 'XXX'
  4. numpy——axis
  5. 北师大版图形的旋转二教案_新北师大版八年级下册数学 《图形的旋转(2)》教案...
  6. 32乘法运算_算术运算指令
  7. java原理教程,java基础之运行原理(一),java基础运行原理
  8. CF1062D Fun with Integers
  9. jpeglib画质的代码分析
  10. 各大主流编程语言比较,运用场景
  11. 创意分析及优化技巧 — 百度推广
  12. adb shell 获取手机分辨率
  13. 图像同态滤波的Butterworth方程(Butterworth equations for homomorphic Filtering of images)
  14. 关于开发人员申请苹果账号相关事宜
  15. iOS PJSIP 接入
  16. C#根据当前时间获取周,月,季度,年度等时间段的起止时间
  17. Galera/mysql 集群 备忘
  18. c语言学习--强制类型转换
  19. 西安电子科技大学计算机科学与技术排名,西安电子科技大学双一流学科名单2个...
  20. 校园二手物品交易平台实现购买商品的功能

热门文章

  1. matlab里的deploy,MATLAB deploytool simulink未定义函数'load_system'
  2. 求二叉树的深度(C++)
  3. BGP过滤器原理和实验(华为设备)
  4. [C语言循环应用]--打印字符金字塔
  5. shell 第六次作业(grep正则、sed)
  6. 关于sts与eclipse版本对应的插件图
  7. FFDshow video encoder -CLSID
  8. 优化 Go 中的 map 并发存取
  9. HashMap底层实现(源码分析)
  10. 玩转html5(三)---智能表单(form),使排版更加方便