$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的更多相关文章

  1. [10.18模拟赛] 序列 (DP)

    [10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...

  2. 2019沈阳网赛树形dp

    https://nanti.jisuanke.com/t/41403 2019沈阳网络赛D题 树形dp.一棵树,求任意两个点的距离之和.u-v和v-u算两次.两点之间的距离分为三类,模3等于0,1,2 ...

  3. HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...

  4. hdu 4274 2012长春赛区网络赛 树形dp ***

    设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...

  5. 模拟赛20181016 dp

    给出1-n的序列插入一个bst: 给出T组询问,包含n,h分别代表点数为n,高度为h的树,求所有插入顺序的合法方案数,模1e9+7 样例输入 1 2  1 样例输出 2 #include<bit ...

  6. [8.16模拟赛] 玩具 (dp/字符串)

    题目描述 儿时的玩具总是使我们留恋,当小皮还是个孩子的时候,对玩具更是情有独钟.小皮是一个兴趣爱好相当广泛且不专一的人,这这让老皮非常地烦恼.也就是说,小皮在不同时刻所想玩的玩具总是会不同,而有心的老 ...

  7. 放棋游戏(NOIP模拟赛)(DP)

    没有原题... 囧.. [问题描述] 游戏规则是这样,有n(1<=n<=100)行格子,第一行由n个格子,第二行有n-1个格子,第三行由n-2个格子,……以此类推,第n行有1个格子.要求再 ...

  8. 98: 模拟赛-神光 dp

    $code$ #include <cstdio> #include <cstring> #include <algorithm> using namespace s ...

  9. NOIp模拟赛 现实(DP 拓扑)

    题目来源:by lzz \(Description\) 给定一张有向图,求对于哪些点,删除它和它的所有连边后,图没有环. \(n\leq 5\times10^5,m\leq 10^6\). \(Sol ...

随机推荐

  1. Oracle——无法在查询中执行 DML 操作

    今天在调用Oracle Function遇到一个异常

  2. MySQL-5.7.26解压版安装教程

    1.下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.26-winx64.zip 2.在解压目录中添加 data文件夹 和 my.in ...

  3. WCF与Web API在应用上的选择

    在最近发布的Visual  Studio 2012及.NET 4.5中, 微软正式推出新的网络服务框架ASP.NET Web API.作为ASP.NET MVC  4的一部分,ASP.NET Web ...

  4. 7 批量查询mget、批量修改bulk

    注意:当执行多条数据查询.增删改时,一定要用mget.bulk,提升性能,减少网络传输   mget   回顾:查询单个文档 GET /beauties/my/2   mget 查询多个文档: 不同 ...

  5. Java High Level REST Client 使用示例

    概述 ES 在 7.0 版本开始将废弃 TransportClient,8.0 版本开始将完全移除 TransportClient,取而代之的是 High Level REST Client,官方文档 ...

  6. console.log()、console.info()、console.debug()的区别

    onsole.log().console.info().console.debug()的作用都是在浏览器控制台打印信息的. 使用最多的是console.log().console.info()和con ...

  7. Oracle 创建数据表

    数据库中的每一个表都被一个模式(或用户)所拥有,因此表是一种典型的模式对象.在创建数据表时,Oracle 将在一个指定的表空间中为其分配存储空间.最初创建的表时一个空的逻辑存储结构,其中不包含任何数据 ...

  8. Java内存模型JMM简单分析

    参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_ ...

  9. 关于SqlServer数据库数据备份失败的问题

    当备份的失败,出现说什么应该支持多少个介质簇,但实际出现了多少介质簇,这个时候就要考虑备份的地址是不是出现问题. 首先,检查备份地址,是不是多于两个以上,那么在备份的时候应该注意,备份地址最好留一个, ...

  10. python(列表函数)

    一.列表函数 1.sort()原址排序 参数默认reverse=False时为正序排序 list1 = [1,3,5,2,1,23,18] list1.sort() print (list1) 当参数 ...