[CSP-S模拟测试]:Equation(数学+树状数组)
2020-12-13 16:21
标签:时间复杂度 printf while 数学 期望 情况下 min change bit 有一棵$n$个点的以$1$为根的树,以及$n$个整数变量$x_i$。树上$i$的父亲是$f_i$,每条边$(i,f_i)$有一个权值$w_i$,表示一个方程$x_i+x_{f_i}=w_i$,这$n−1$个方程构成了一个方程组。 从文件$equation.in$中读入数据。 输出到文件$equation.out$中。 样例输入: 2 7 样例输出: none 对于所有数据,有$1\leqslant n,q\leqslant 10^6,1\leqslant f_i\leqslant i−1,1\leqslant u,v\leqslant n,−10^3\leqslant w,w_i\leqslant 10^3,−10^9\leqslant s\leqslant 10^9$。 首先,思考在没有修改的情况下如何快速求出$1$的解,其实无非就是分深度的奇偶,然后算边的前缀和罢了,比方说下图:
不妨设$4$为已知$x$,那么$3$就是$w_3-x$,$2$就是$w_2-w_3+x$,$1$就是$w_1-w_2+w_3-x$,发现什么规律了没有? 有点类似于多步容斥的奇加偶减。 那么考虑如何修改,我们如果要改一条边,那么将会影响到这条边所连两点中儿子的整个子树,显然不能暴力修改。 发现这个问题其实就是区间修改,单点查询;不妨树状数组? 利用树状数组维护$DFS$序即可。 这个题稍卡常…… 听说线段树会$TLE$? 时间复杂度:$\Theta((n+q)\log n)$。 期望得分:$100$分。 实际得分:$100$分。 rp++ [CSP-S模拟测试]:Equation(数学+树状数组) 标签:时间复杂度 printf while 数学 期望 情况下 min change bit 原文地址:https://www.cnblogs.com/wzc521/p/11619378.html题目描述
现在给出$q$个操作,有两种类型:
$\bullet 1\ u\ v\ s$,表示询问加上$x_u+x_v=s$这个方程后,整个方程组的解的情况。具体来说,如果方程有唯一解,输出此时$x_1$的值;如果有无限多个解,输出$inf$;如果无解,输出$none$。注意每个询问是独立的。
$\bullet 2\ u\ w$,表示将$w_u$修改为$w$。
输入格式
第一行两个整数$n,q$。
接下来$n−1$行,第$i$行有两个整数$f_{i+1}$和$w_{i+1}$。
接下来$q$行,每行表示一个操作,格式见问题描述。
输出格式
对于每个询问输出一行表示答案。
样例
1 4
1 1 2 5
1 1 2 4
1 1 1 3
1 2 2 6
2 2 3
1 2 2 10
1 2 2 -10
inf
none
1
-2
8
数据范围与提示
$\bullet Subtask1(3\%)$,$n\leqslant 10,q=0$。
$\bullet Subtask2(18\%)$,$n=2$。
$\bullet Subtask3(32\%)$,$n,q\leqslant 10^3$。
$\bullet Subtask4(33\%)$,$n,q\leqslant 10^5$。
$\bullet Subtask5(14\%)$,没有特殊的约束。
题解
代码时刻
#include
文章标题:[CSP-S模拟测试]:Equation(数学+树状数组)
文章链接:http://soscw.com/essay/36024.html