83: 模拟赛 树形dp
$des$

$sol$
维护每个点的子树中的信息以及非子树的信息
$code$
#include <bits/stdc++.h> using namespace std; #define gc getchar()
inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} #define Rep(i, a, b) for(int i = a; i <= b; i ++) const int N = 1e5 + ; int f[N][], g[N][];
int n, p;
int deep[N], fa[N], size[N][], sizeg[N][]; struct Node {
int v, w, nxt;
} G[N << ];
int cnt, head[N]; void Link(int u, int v, int w) {
G[++ cnt].v = v, G[cnt].w = w, G[cnt].nxt = head[u]; head[u] = cnt;
} void Dfs1(int u, int f_, int dep) {
deep[u] = dep, fa[u] = f_;
for(int i = head[u]; ~ i; i = G[i].nxt) {
int v = G[i].v;
if(v == f_) continue;
Dfs1(v, u, dep + );
}
} void Dfs2(int u) {
for(int i = head[u]; ~ i; i = G[i].nxt) {
int v = G[i].v, w = G[i].w;
if(v == fa[u]) continue;
Dfs2(v);
if(w % ) {
size[u][] += size[v][];
size[u][] += size[v][];
size[u][] ++;
f[u][] += f[v][] + w * size[v][];
f[u][] += f[v][] + w * size[v][] + w;
} else {
size[u][] += size[v][];
size[u][] += size[v][];
size[u][] ++;
f[u][] += f[v][] + w * size[v][] + w;
f[u][] += f[v][] + w * size[v][];
}
}
} void Dfs3(int u) {
for(int i = head[u]; ~ i; i = G[i].nxt) {
int v = G[i].v, w = G[i].w;
if(v == fa[u]) continue;
if(w % ) {
sizeg[v][] ++;
sizeg[v][] += sizeg[u][] + size[u][] - size[v][];
sizeg[v][] += sizeg[u][] + size[u][] - size[v][] - ;
g[v][] += g[u][] + (f[u][] - f[v][]) - size[v][] * w;
g[v][] += w * (sizeg[u][] + size[u][] - size[v][] + );
g[v][] += g[u][] + (f[u][] - f[v][]) - size[v][] * w - w;
g[v][] += w * (sizeg[u][] + size[u][] - size[v][] - );
} else {
sizeg[v][] ++;
sizeg[v][] += sizeg[u][] + size[u][] - size[v][];
sizeg[v][] += sizeg[u][] + size[u][] - size[v][] - ;
g[v][] += g[u][] + (f[u][] - f[v][]) - size[v][] * w;
g[v][] += w * (sizeg[u][] + size[u][] - size[v][]);
g[v][] += g[u][] + (f[u][] - f[v][]) - size[v][] * w - w;
g[v][] += w * (sizeg[u][] + size[u][] - size[v][] + - );
}
Dfs3(v);
}
} int main() {
n = read(), p = read();
Rep(i, , n) head[i] = -;
Rep(i, , n - ) {
int u = read(), v = read(), w = read();
Link(u, v, w), Link(v, u, w);
}
Dfs1(, , );
Dfs2();
Dfs3();
Rep(pp, , p) {
int x = read();
int j = f[x][] + g[x][];
int o = f[x][] + g[x][];
cout << j << " " << o << "\n";
} return ;
}
83: 模拟赛 树形dp的更多相关文章
- [10.18模拟赛] 序列 (DP)
[10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...
- 2019沈阳网赛树形dp
https://nanti.jisuanke.com/t/41403 2019沈阳网络赛D题 树形dp.一棵树,求任意两个点的距离之和.u-v和v-u算两次.两点之间的距离分为三类,模3等于0,1,2 ...
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...
- hdu 4274 2012长春赛区网络赛 树形dp ***
设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...
- 模拟赛20181016 dp
给出1-n的序列插入一个bst: 给出T组询问,包含n,h分别代表点数为n,高度为h的树,求所有插入顺序的合法方案数,模1e9+7 样例输入 1 2 1 样例输出 2 #include<bit ...
- [8.16模拟赛] 玩具 (dp/字符串)
题目描述 儿时的玩具总是使我们留恋,当小皮还是个孩子的时候,对玩具更是情有独钟.小皮是一个兴趣爱好相当广泛且不专一的人,这这让老皮非常地烦恼.也就是说,小皮在不同时刻所想玩的玩具总是会不同,而有心的老 ...
- 放棋游戏(NOIP模拟赛)(DP)
没有原题... 囧.. [问题描述] 游戏规则是这样,有n(1<=n<=100)行格子,第一行由n个格子,第二行有n-1个格子,第三行由n-2个格子,……以此类推,第n行有1个格子.要求再 ...
- 98: 模拟赛-神光 dp
$code$ #include <cstdio> #include <cstring> #include <algorithm> using namespace s ...
- NOIp模拟赛 现实(DP 拓扑)
题目来源:by lzz \(Description\) 给定一张有向图,求对于哪些点,删除它和它的所有连边后,图没有环. \(n\leq 5\times10^5,m\leq 10^6\). \(Sol ...
随机推荐
- Qt5 源代码自动跳转
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/nixiaoxianggong/articl ...
- Java多线程编程之读写锁【ReentrantReadWriteLock】
有时候我们需要有这样的需求: 对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进行 ...
- Ubuntu 18.04下安装Steam顶级在线游戏平台
Ubuntu 18.04下安装Steam顶级在线游戏平台 原创: 聆听世界的鱼 Linux公社 今天 Steam是由Valve公司开发的顶级在线游戏平台,是目前全球最大的综合性数字发行平台之一.它让你 ...
- 缺陷的背后(三)---mysql之sql_mode为空的陷阱
导语 mysql服务器可以在不同的sql_mode模式下运行,并且可以根据sql_mode系统变量的值,为不同的客户机应用不同的模式.sql_mode会影响mysql支持的sql语法,并且会执行数据验 ...
- Bean管理学习笔记
1.BeanFactory 介绍 1.1 首先什么是Bean? 1.Bean在Spring技术中是基于组件 2.他是Spring容器管理的最基本最常见的单元.在spring的应用场合中,bean可以是 ...
- “proxy” in package.json must be a string 解决办法
今天学习一个react项目.想从本地服务器获取数据. 直接axios.get('http://localhost:80/api/react/header.json'),报错跨域. 网上查了下,需要在p ...
- Ubuntu-18.04 LTS UEFI 安装U盘制作
要把U盘作为UEFI启动盘,第一个分区要为FAT32分区,EFI程序放在/EFI/Boot/bootx64.efi.为了制作Ubuntu-18.04 LTS安装U盘,可以把一个U盘格式化为FAT32格 ...
- tkinter 按钮响应函数传值
tkinter 中的Button组件的响应函数如何传入参数,可能非常困扰新手,这里记录一下. 步骤: 1. 写好响应函数(形参设置好) 2. 在Button command 设置形式:command ...
- Android笔记(四十八) Android中的资源访问——SDCard
访问存储在SD卡中的文件 使用 Environment.getExternalStorageState(); 判断是否存在内存卡 使用 Environment.getExternalStorageDi ...
- python代码组织及模块使用
python代码组织 python和其他编程语言一样,采用包管理代码,一个包中可包含许多模块. 使用模块最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其 ...