Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:2 s 空间限制:512 MB

#2891. 「LibreOJ NOI Round #2」黄金矿工

Statistics

题目描述

你是一处金矿的主人,并且有若干矿工要来这里挖黄金。

这处宝藏有 $n$ 个可能的藏宝点,这 $n$ 个点构成了一棵有根树的结构。

树上的每条边都是有向的,从父亲指向儿子,并且有个正整数权值 $c_i$,表示每有一个矿工从这条边走过,你会收取 $c_i$ 的过路费。

每个矿工 $x$ 会从某一个藏宝点 $u$ 出发,并且有一个正整数权值 $P_x$,表示如果你允许他来挖宝,将会获得 $P_x$ 的入场费。

某个藏宝点 $u$ 可能还会出现一块权值为 $Q_y$ 黄金,表示如果有矿工挖取了这个黄金,你会从中提走 $Q_y $的利润。

一个矿工 $x$ 挖取一块黄金 $y$ 的收益是 $P_x+Qy+\sum{e}{c_e}$,其中边 $e$ 在人 $x$ 和黄金 $y$ 的路径上。

注意一个矿工只能挖取一块黄金,一块黄金也只能被一个矿工挖取。一个矿工只能挖取他沿着树上有向边能到的黄金,同一条边在同一个挖取方案中可以被多个人经过

一开始既没有黄金也没有矿工。

我们需要支持 $q$ 次操作,每次操作有两种类型:

  • $1$ $u$ $v$:表示在点 $u$ 上新出现了一个权为 $v$ 的矿工。
  • $2$ $u$ $v$:表示在点 $u$ 上新出现了一块权为 $v$ 的黄金。

你需要在每次操作后算出,如果让某些矿工去挖取黄金,那么可能的最大收益是多少。

注意你并不需要最大化挖到黄金的人数量

输入格式

从标准输入读入数据。

第一行两个整数 $n$ 和 $q$,表示树的节点和操作数。

接下来 $n-1$ 行,每行三个正整数 $u,v,c$,表示有一条权为 $c$ 的边从点 $u$ 指向点 $v$。

接下来 $q$ 行每行描述一次操作。

输出格式

输出到标准输出。

对于每次操作,输出一个整数表示这次操作执行后的答案。

样例

input

5 5
1 2 1
1 3 1
1 4 1
4 5 1
1 3 5
2 3 1
1 4 8
1 1 1
2 1 10

output

0
6
6
6
17

第二次操作后,最优匹配方案是,让第一次操作添加的矿工挖去第二次操作添加的黄金。

第五次操作后,最优匹配方案为,在前一方案的基础上,让第四次操作添加的矿工挖去第五次操作添加的黄金。

见下发文件。

见下发文件。

数据范围与提示

对于所有数据,保证 $n,q \le 10^5$,并且所有树边的权均为不超过 $10^3$ 的正整数,所有矿工和黄金的权均为不超过 $10^8$ 的正整数。

测试点 $n=$ $q= $ 特殊性质
1 $8$ $8$ C2
2 $300$ $300$ C2
3,4 $4 * 10^3$ $4 * 10^3$ C2
5 ~ 10 $ 10^3 $ $ 5 * 10^4 $ C1
11 ~ 13 $ 10^3 $ $ 5 * 10^4 $ C2
14,15 $10^5$ $5 * 10^4$ A1
16,17 $10^5$ $5 * 10^4$ B1
18,19 $10^5$ $5 * 10^4$ C1
20 ~ 24 $10^5$ $5 * 10^4$ C2
25 $10^5$ $10^5$ C2

表格中的特殊性质

  • A:第 $i$ 条边从 $i$ 指向 $i+1$
  • B:第 $i$ 条边从 $\lfloor \frac{i+1}{2} \rfloor$ 指向 $i+1$
  • C:在树的形态上无特殊约束
  • 1:保证所有 $1$ 操作都在 $2$ 操作之后
  • 2:在操作类型上无特殊约束