Educational Codeforces Round 15 E. Analysis of Pathes in Functional Graph (倍增RMQ)

网友投稿 259 2022-08-27

Educational Codeforces Round 15 E. Analysis of Pathes in Functional Graph (倍增RMQ)

E. Analysis of Pathes in Functional Graph

time limit per test

memory limit per test

input

output

You are given a functional graph. It is a directed graph, in which from each vertex goes exactly one arc. The vertices are numerated from 0 to n - 1.

Graph is given as the array f0, f1, ..., fn - 1, where fi — the number of vertex to which goes the only arc from the vertex i. Besides you are given array with weights of the arcs w0, w1, ..., wn - 1, where wi — the arc weight from i to fi.

The graph from the first sample test.

Also you are given the integer k (the length of the path) and you need to find for each vertex two numbers si and mi, where:

si— the sum of the weights of all arcs of the path with length equals tokwhich starts from the vertexi;mi— the minimal weight from all arcs on the path with lengthkwhich starts from the vertexi.

The length of the path is the number of arcs on this path.

Input

The first line contains two integers n, k (1 ≤ n ≤ 105, 1 ≤ k ≤ 1010). The second line contains the sequence f0, f1, ..., fn - 1 (0 ≤ fi < n) and the third — the sequence w0, w1, ..., wn - 1 (0 ≤ wi ≤ 108).

Output

Print n lines, the pair of integers si, mi

Examples

input

7 31 2 3 4 3 2 66 3 1 4 2 2 3

output

10 18 17 110 28 27 19 3

input

4 40 1 2 30 1 2 3

output

0 04 18 212 3

input

5 31 2 3 4 04 1 2 14 3

output

7 117 119 221 38 1

题意:给你一个图,图中n个点n个边(有向),每个边长度为1,上面有一个数字。给你一个k,对每个点询问距离为k的路径中的所有数的和,以及所有路径中最小的数。n<=100000 K<=10^10。

题解:因为k很大啊,很明显要倍增,直接用RMQ就可以了。(倍增RMQ)

代码:

#pragma comment(linker, "/STACK:102400000,102400000")#include#include#include#include#include#include#include#include#include#include#include#include#include using namespace std;typedef long long ll;typedef unsigned long long ull;#define mst(a) memset(a, 0, sizeof(a))#define M_P(x,y) make_pair(x,y)#define pii pair#define rep(i,j,k) for (int i = j; i <= k; i++) #define per(i,j,k) for (int i = j; i >= k; i--) #define lson x << 1, l, mid #define rson x << 1 | 1, mid + 1, r const int lowbit(int x) { return x&-x; } const double eps = 1e-8; const int INF = 1e9+7; const ll inf =(1LL<<62) ;const int MOD = 1e9 + 7; const ll mod = (1LL<<32);const int N = 2e5+10; const int M=100010; const int MAXN=100005;template inline void getmax(T1 &a, T2 b) {if (b>a)a = b;} template inline void getmin(T1 &a, T2 b) {if (b=0;--j) if(k&(1LL<

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:你知道营销策划的实质吗?(为什么要营销策划)
下一篇:HDU 5781 ATM Mechine (概率dp)(求最优策略期望)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~