P5836
[USACO19DEC]Milk Visits S
题目描述
Farmer John 计划建造 \(N\) 个农场,用 \(N-1\) 条道路连接,构成一棵树(也就是说,所有农场之间都互相可以到达,并且没有环)。每个农场有一头奶牛,品种为更赛牛或荷斯坦牛之一。
Farmer John 的 \(M\) 个朋友经常前来拜访他。在朋友 \(i\) 拜访之时,Farmer John 会与他的朋友沿着从农场 \(A_i\) 到农场 \(B_i\) 之间的唯一路径行走(可能有 \(A_i = B_i\))。除此之外,他们还可以品尝他们经过的路径上任意一头奶牛的牛奶。由于 Farmer John 的朋友们大多数也是农场主,他们对牛奶有着极强的偏好。他的有些朋友只喝更赛牛的牛奶,其余的只喝荷斯坦牛的牛奶。任何 Farmer John 的朋友只有在他们访问时能喝到他们偏好的牛奶才会高兴。
请求出每个朋友在拜访过后是否会高兴。
输入格式
输入的第一行包含两个整数 \(N\) 和 \(M\)。
第二行包含一个长为 \(N\) 的字符串。如果第 \(i\) 个农场中的奶牛是更赛牛,则字符串中第 \(i\) 个字符为 G,如果第 \(i\) 个农场中的奶牛是荷斯坦牛则为 H。
以下 \(N-1\) 行,每行包含两个不同的整数 \(X\) 和 \(Y\)(\(1 \leq X, Y \leq N\)),表示农场 \(X\) 与 \(Y\) 之间有一条道路。
以下 \(M\) 行,每行包含整数 \(A_i\),\(B_i\),以及一个字符 \(C_i\)。\(A_i\) 和 \(B_i\) 表示朋友 \(i\) 拜访时行走的路径的端点,\(C_i\) 是 G 或 H 之一,表示第 \(i\) 个朋友喜欢更赛牛的牛奶或是荷斯坦牛的牛奶。
输出格式
输出一个长为 \(M\) 的二进制字符串。如果第 \(i\) 个朋友会感到高兴,则字符串的第 \(i\) 个字符为 1,否则为 0。
样例 #1
样例输入 #1
5 5
HHGHG
1 2
2 3
2 4
1 5
1 4 H
1 4 G
1 3 G
1 3 H
5 5 H
样例输出 #1
10110
提示
在这里,从农场 1 到农场 4 的路径包括农场 1、2 和 4。所有这些农场里都是荷斯坦牛,所以第一个朋友会感到满意,而第二个朋友不会。
关于部分分:
测试点 \(1\) 样例。
测试点 \(2\sim 5\) 满足 \(N\le 10^3\),\(M\le 2\cdot 10^3\)。
对于 \(100\%\) 的数据,\(1 \leq N \leq 10^5\),\(1 \leq M \leq 10^5\)。
总结一下LCA能干啥
树上距离
类似树上前缀和的东西都可以转换成s[x]+s[y]-2*s[lca]+val[lca]
注意lca那个点被挖掉了 要考虑补不补上
像这道题 就可以用g[],h[]来前缀和 统计x->y的路径上的g[] u[] 差就行了
即 cntg=g[x]+g[y]-2*g[lca]+(s[lca]=='G')
cnth=h[x]+h[y]-2*h[lca]+(s[lca]=='H')

浙公网安备 33010602011771号