[USACO12FEB]附近的牛Nearby Cows
题目链接: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相关推荐
- P3047 [USACO12FEB]附近的牛Nearby Cows
题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...
- 洛谷P2017 [USACO09DEC]晕牛Dizzy Cows [拓扑排序]
题目传送门 晕牛Dizzy Cows 题目背景 Hzwer 神犇最近又征服了一个国家,然后接下来却也遇见了一个难题. 题目描述 The cows have taken to racing each o ...
- USACO12FEB Nearby Cows
完全没有思路,看了题解还有些迷 设f[i][j]表示和节点\(i\)距离为\(j\)的节点的总数,\(son\)为\(i\)的儿子,\(num\)为儿子的数量 则转移方程为f[i][j] = f[s] ...
- P2017 [USACO09DEC]晕牛Dizzy Cows
图论日常不会系列... 题意:给定有向边和无向边,然后给每一条无向边定向,使得到的图无环. 我本来想缩一下点的,但是越想越晕. 然后就翻了题解,恍然大悟... 其实只需要给只有有向边的图跑一次topo ...
- linux删除多余日志,linux 删除日志
https://jingyan.baidu.com/album/c1a3101e73129ade656deb9d.html?picindex=2 里面的 ls -s 可以看到目录 https://zh ...
- USACO Clumsy Cows
洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows 洛谷传送门 JDOJ 2323: USACO 2012 Nov Silver 1.Clumsy Cows JDOJ传送门 Desc ...
- cocos creator小游戏案例之趣味套牛
趣味套牛 0. 思路 搭建基本背景 奔跑的牛 套牛的绳子 套牛成功的判定 结算 重新开始 特效,(音效,粒子) 1. 基本背景 按钮 添加 button 组件 transition: sprite 2 ...
- 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 ...
- 动态规划--from zpz
版权声明:copy from zpz,我可能要修改 https://blog.csdn.net/qq_40828060/article/details/83064425 文章目录 前言 记忆化搜索 动 ...
- 动态规划,且学且放弃
文章目录 前言 记忆化搜索 动态规划的基本解题思路 背包问题 01背包 (待处理)P1489 猫狗大战 01背包的空间优化问题 P1048 采药 P1510 精卫填海 P1566 加等式 P1504 ...
最新文章
- flink 自定义 窗口_Flink入门实战 (下)
- 推荐 | 几个最有价值的科研学术类资源
- IDEA_Spring Data JPA有关报错Cannot resolve table 'XXX'
- numpy——axis
- 北师大版图形的旋转二教案_新北师大版八年级下册数学 《图形的旋转(2)》教案...
- 32乘法运算_算术运算指令
- java原理教程,java基础之运行原理(一),java基础运行原理
- CF1062D Fun with Integers
- jpeglib画质的代码分析
- 各大主流编程语言比较,运用场景
- 创意分析及优化技巧 — 百度推广
- adb shell 获取手机分辨率
- 图像同态滤波的Butterworth方程(Butterworth equations for homomorphic Filtering of images)
- 关于开发人员申请苹果账号相关事宜
- iOS PJSIP 接入
- C#根据当前时间获取周,月,季度,年度等时间段的起止时间
- Galera/mysql 集群 备忘
- c语言学习--强制类型转换
- 西安电子科技大学计算机科学与技术排名,西安电子科技大学双一流学科名单2个...
- 校园二手物品交易平台实现购买商品的功能
热门文章
- matlab里的deploy,MATLAB deploytool simulink未定义函数'load_system'
- 求二叉树的深度(C++)
- BGP过滤器原理和实验(华为设备)
- [C语言循环应用]--打印字符金字塔
- shell 第六次作业(grep正则、sed)
- 关于sts与eclipse版本对应的插件图
- FFDshow video encoder -CLSID
- 优化 Go 中的 map 并发存取
- HashMap底层实现(源码分析)
- 玩转html5(三)---智能表单(form),使排版更加方便