QOJ.ac

QOJ

Time Limit: 6 s Memory Limit: 512 MB Total points: 100

#869. 树上博弈

Statistics

有一些朋友,编号从 $0$ 到 $m-1$,正在玩一个游戏。游戏中有 $c$ 种不同颜色的卡牌,颜色编号从 $0$ 到 $c-1$。每种颜色 $i$ 的卡牌都有一个固定的价值 $p_i$。游戏开始时,每个玩家选择一定数量的卡牌,且不能持有超过一张同种颜色的卡牌(尽管不同的朋友可以选择相同颜色的卡牌)。我们定义一副牌组的得分为其所有卡牌价值的 GCD(最大公约数)。注意,空牌组的得分为 $0$。游戏将在一个无向图上进行,该图是一棵包含 $n$ 个节点的树,节点编号从 $0$ 到 $n-1$。每个节点 $v$ 上都有一张颜色为 $c_v$ 的卡牌,不同节点可能拥有相同颜色的卡牌。

游戏共有 $m$ 轮。在第 $i$ 轮中,第 $i$ 个朋友进行操作。首先,他选择两个不同的顶点 $u$ 和 $v$。然后,对于从 $u$ 到 $v$ 路径上的每个节点(包括 $u$ 和 $v$),每个玩家(包括他自己)都会抽取一张颜色为该节点卡牌颜色的卡牌。如果他们已经拥有了该颜色的卡牌,他们将丢弃这两张卡牌。在此之后,玩家 $i$ 获得的得分为所有玩家(包括他自己)牌组得分的总和。最后,他选择图中的一个节点,并从牌堆中抽取一张新卡牌。然后他将该节点的卡牌替换为刚抽到的卡牌(并丢弃旧卡牌),结束他的回合。

给定每一轮的信息,请输出每位朋友在游戏结束时拥有的总得分,结果对 $10^9 + 7$ 取模。

输入格式

第一行包含三个整数 $m, c, n$ ($2 \le m, n \le 10^5$; $1 \le c \le 20$):朋友的数量(即轮数)、不同颜色的数量以及树的节点数。

第二行包含 $c$ 个整数 $p_0, p_1, \dots, p_{c-1}$ ($0 \le p_i \le 10^9$),其中 $p_i$ 是颜色为 $i$ 的卡牌的价值。

接下来的 $m$ 行,每行以一个整数 $x$ ($0 \le x \le c$) 开头,表示第 $i$ 个玩家初始持有的卡牌数量。随后是 $x$ 个整数 $y_0, y_1, \dots, y_{x-1}$ ($0 \le y_i < c$):该玩家持有的所有卡牌的颜色。

下一行包含 $n$ 个整数 $c_0, c_1, \dots, c_{n-1}$ ($0 \le c_i < c$),表示图中每个节点的卡牌颜色。

接下来的 $n-1$ 行,每行包含两个整数 $u$ 和 $v$ ($0 \le u, v < n$),表示节点 $u$ 和 $v$ 之间有一条边。保证这些边构成一棵树。

最后,$m$ 行中的每一行包含四个整数 $u, v, w, y$ ($0 \le u, v, w < n; u \neq v; 0 \le y < c$),这些整数编码了每一轮的信息:选择的两个节点($u$ 和 $v$)以及将要被替换卡牌的节点 $w$,替换后的卡牌颜色为 $y$。

输出格式

输出一行,包含 $m$ 个整数:$points_0, points_1, \dots, points_{m-1}$,其中 $points_i$ 是第 $i$ 位朋友最终拥有的得分,对 $10^9 + 7$ 取模。

样例

样例输入 1

3 4 7
0 2 3 6
2 1 2
3 0 2 3
2 0 1
2 1 2 3 0 1 1
0 1
2 0
3 0
1 4
6 4
4 5
5 2 4 1
6 1 1 2
4 2 0 3

样例输出 1

6 4 9

样例输入 2

7 4 8
28 49 88 49
1 1
3 2 0 3
0
1 3
0
0
1 0
2 2 2 2 3 0 1 2
0 2
0 3
2 6
0 4
3 7
7 1
2 5
1 4 4 1
3 6 4 2
7 6 4 2
6 2 2 2
4 2 7 0
2 3 5 3
5 1 4 1

样例输出 2

207 13 121 253 13 253 106

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.