当前位置:网站首页>P3047 [usaco12feb]nearby cows g (tree DP)
P3047 [usaco12feb]nearby cows g (tree DP)
2022-07-06 07:42:00 【eva_ can(not)survive】
[USACO12FEB]Nearby Cows G - Luogu https://www.luogu.com.cn/problem/P3047 A very interesting tree dp
We can set the State f【i】【j】, i Is the current root ,j The distance is j Point weight sum of time
First we can take 1 Run for the root dfs, Will be with i The point weight and record of the subtree for the root, that is, update the father with the son , here 1 It must be over , We can start from 1 Start running dfs Use the father to renew the son .
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
#include <bitset>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) ((x)&(-x))
using P = pair<int, int>;
int n, k;
int head[MAXN];
int ver[MAXN];
int nxt[MAXN];
int cost[MAXN];
int cnt;
int dep[MAXN];
int dp[MAXN][21];
void add(int x, int y) {
ver[++cnt] = y;
nxt[cnt] = head[x];
head[x] = cnt;
}
void dfs1(int p, int fa) {
for (int i = head[p]; i; i = nxt[i]) {
int v = ver[i];
if (v == fa)
continue;
// dep[v] = dep[p] + 1;
dfs1(v, p);
for (int j = 1; j <= k; j++) {
dp[p][j] += dp[v][j - 1];
}
}
}
void dfs2(int p, int fa) {
for (int i = head[p]; i; i = nxt[i]) {
int v = ver[i];
if (v == fa)
continue;
for (int j = k; j >= 2; j--) {
dp[v][j] += dp[p][j - 1] - dp[v][j - 2];
}
dp[v][1] += cost[p];
dfs2(v, p);
}
}
int main() {
scanf("%d %d", &n, &k);
int x, y;
for (int i = 1; i <= n - 1; i++) {
scanf("%d %d", &x, &y);
add(x, y);
add(y, x);
}
for (int i = 1; i <= n; i++) {
scanf("%d", cost + i);
dp[i][0] = cost[i];
}
dfs1(1, 0);
dfs2(1, 0);
for (int i = 1; i <= n; i++) {
int ans = 0;
for (int j = 0; j <= k; j++) {
ans += dp[i][j];
}
printf("%d\n", ans);
}
return 0;
}
边栏推荐
- In the era of digital economy, how to ensure security?
- [MySQL learning notes 29] trigger
- Set picture annotation in markdown
- Google may return to the Chinese market after the Spring Festival.
- Simulation of Michelson interferometer based on MATLAB
- If Jerry's Bluetooth device wants to send data to the mobile phone, the mobile phone needs to open the notify channel first [article]
- Typescript interface and the use of generics
- Significance and measures of encryption protection for intelligent terminal equipment
- Wonderful use of TS type gymnastics string
- 洛谷P1836 数页码 题解
猜你喜欢
Jerry's ad series MIDI function description [chapter]
TypeScript接口与泛型的使用
解决方案:智慧工地智能巡检方案视频监控系统
[cf gym101196-i] waif until dark network maximum flow
[1. Delphi foundation] 1 Introduction to Delphi Programming
Ble of Jerry [chapter]
Generator Foundation
【Redis】NoSQL数据库和redis简介
Esrally domestic installation and use pit avoidance Guide - the latest in the whole network
In the era of digital economy, how to ensure security?
随机推荐
Scala language learning-08-abstract classes
Redis builds clusters
Inspiration from the recruitment of bioinformatics analysts in the Department of laboratory medicine, Zhujiang Hospital, Southern Medical University
The way to learn go (II) basic types, variables and constants
MEX有关的学习
WebRTC系列-H.264预估码率计算
word中把帶有某個符號的行全部選中,更改為標題
C # display the list control, select the file to obtain the file path and filter the file extension, and RichTextBox displays the data
剪映的相关介绍
Brief explanation of instagram operation tips in 2022
[KMP] template
Memory error during variable parameter overload
Significance and measures of encryption protection for intelligent terminal equipment
JMeter performance test steps practical tutorial
[count] [combined number] value series
Typescript void base type
Excel的相关操作
软件测试界的三无简历,企业拿什么来招聘你,石沉大海的简历
The way to learn go (I) the basic introduction of go to the first HelloWorld
二叉树创建 & 遍历