CF1000G.Two-Paths
省选/NOI-
通过率:0%
时间限制:3.50s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a weighted tree (undirected connected graph with no cycles, loops or multiple edges) with n vertices. The edge uj,vj has weight wj. Also each vertex i has its own value ai assigned to it.
Let's call a path starting in vertex u and ending in vertex v, where each edge can appear no more than twice (regardless of direction), a 2-path. Vertices can appear in the 2-path multiple times (even start and end vertices).
For some 2-path p profit Pr(p)=v∈distinct vertices in p∑av−e∈distinct edges in p∑ke⋅we, where ke is the number of times edge e appears in p. That is, vertices are counted once, but edges are counted the number of times they appear in p.
You are about to answer m queries. Each query is a pair of vertices (qu,qv). For each query find 2-path p from qu to qv with maximal profit Pr(p).
给你一棵带权树(即无环、无自环、无重边的无向连通图),该树包含 n 个顶点。边 {uj,vj} 的权重为 wj。此外,每个顶点 i 都被赋予一个值 ai。
我们称一条从顶点 u 出发、到顶点 v 结束的路径为2-路径(2-path),其中每条边在该路径中至多出现两次(不区分方向)。顶点在 2-路径中可以多次出现(包括起点和终点)。
对于某条 2-路径 p,其收益(profit)定义为
Pr(p)=v∈distinct vertices in p∑av−e∈distinct edges in p∑ke⋅we,
其中 ke 表示边 e 在 p 中出现的次数。即:顶点仅按其是否在 p 中出现过计一次,而边则按其在 p 中实际出现的次数加权计入。
你将回答 m 个查询。每个查询给出一对顶点 (qu,qv)。对每个查询,请找出一条从 qu 到 qv 的 2-路径 p,使得其收益 Pr(p) 最大。
输入格式
The first line contains two integers n and q (2≤n≤3⋅105, 1≤q≤4⋅105) — the number of vertices in the tree and the number of queries.
The second line contains n space-separated integers a1,a2,…,an (1≤ai≤109) — the values of the vertices.
Next n−1 lines contain descriptions of edges: each line contains three space separated integers ui, vi and wi (1≤ui,vi≤n, ui=vi, 1≤wi≤109) — there is edge ui,vi with weight wi in the tree.
Next q lines contain queries (one per line). Each query contains two integers qui and qvi (1≤qui,qvi≤n) — endpoints of the 2-path you need to find.
第一行包含两个整数 n 和 q(2≤n≤3⋅105,1≤q≤4⋅105)—— 分别表示树中顶点的数量和查询的数量。
第二行包含 n 个用空格分隔的整数 a1,a2,…,an(1≤ai≤109)—— 表示各顶点的权值。
接下来 n−1 行描述树的边:每行包含三个用空格分隔的整数 ui、vi 和 wi(1≤ui,vi≤n,ui=vi,1≤wi≤109)—— 表示树中存在一条连接顶点 ui 与 vi、权重为 wi 的边。
接下来 q 行为查询(每行一个查询)。每个查询包含两个整数 qui 和 qvi(1≤qui,qvi≤n)—— 表示你需要寻找的“2-路径”的两个端点。
输出格式
For each query print one integer per line — maximal profit Pr(p) of the some 2-path p with the corresponding endpoints.
对于每个查询,每行输出一个整数——具有对应端点的某条 2-路径 p 的最大收益 Pr(p)。
输入输出样例
输入#1
7 6 6 5 5 3 2 1 2 1 2 2 2 3 2 2 4 1 4 5 1 6 4 2 7 3 25 1 1 4 4 5 6 6 4 3 4 3 7
输出#1
9 9 9 8 12 -14
说明/提示
Explanation of queries:
- (1,1) — one of the optimal 2-paths is the following: 1→2→4→5→4→2→3→2→1. Pr(p)=(a1+a2+a3+a4+a5)−(2⋅w(1,2)+2⋅w(2,3)+2⋅w(2,4)+2⋅w(4,5))=21−2⋅12=9.
- (4,4): 4→2→1→2→3→2→4. Pr(p)=(a1+a2+a3+a4)−2⋅(w(1,2)+w(2,3)+w(2,4))=19−2⋅10=9.
- (5,6): 5→4→2→3→2→1→2→4→6.
- (6,4): 6→4→2→1→2→3→2→4.
- (3,4): 3→2→1→2→4.
- (3,7): 3→2→1→2→4→5→4→2→3→7.
查询解释:
- (1,1) — 其中一条最优的 2-路径如下:1→2→4→5→4→2→3→2→1。Pr(p)=(a1+a2+a3+a4+a5)−(2⋅w(1,2)+2⋅w(2,3)+2⋅w(2,4)+2⋅w(4,5))=21−2⋅12=9。
- (4,4):4→2→1→2→3→2→4。Pr(p)=(a1+a2+a3+a4)−2⋅(w(1,2)+w(2,3)+w(2,4))=19−2⋅10=9。
- (5,6):5→4→2→3→2→1→2→4→6。
- (6,4):6→4→2→1→2→3→2→4。
- (3,4):3→2→1→2→4。
- (3,7):3→2→1→2→4→5→4→2→3→7。
输入解题思路,AI测评打分。不知道怎么写?