0
点赞
收藏
分享

微信扫一扫

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


思路:由于是一个n个点n条边的有向图,并且题目的输入已经说明了每一条路径都是唯一的并且没有终点,所以可以用倍增的思想处理,令dp[i][j]为第i个节点然后走2^j这样做....没想到...



#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn = 1e5+7;
int fa[maxn][35];
LL minval[maxn][35];
LL sum[maxn][35];
void init(int n)
{
	for(int k=1;k<34;k++)
		for(int i = 0;i<n;i++)
		{
			fa[i][k]=fa[fa[i][k-1]][k-1];
			minval[i][k]=min(minval[i][k-1],minval[fa[i][k-1]][k-1]);
			sum[i][k] = sum[i][k-1]+sum[fa[i][k-1]][k-1];
		}
}
void solve(int r,LL m)
{
    LL ansmin = 1e9+6;
	LL anssum = 0;
    for(int k = 0;k<34;k++)
		if(m&(1LL<<k))
		{
			anssum+=sum[r][k];
			ansmin = min(ansmin,minval[r][k]);
			r = fa[r][k];
		}
	printf("%lld %lld\n",anssum,ansmin);
}
int main()
{
    int n;
	LL m;
	scanf("%d%lld",&n,&m);
	for(int i = 0;i<n;i++)
		scanf("%d",&fa[i][0]);
	for(int i = 0;i<n;i++)
	{
		scanf("%lld",&minval[i][0]);
		sum[i][0]=minval[i][0];
	}
	init(n);
	for(int i = 0;i<n;i++)
		solve(i,m);
}





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.



Educational Codeforces Round 15 E Analysis of Pathes in Functional Graph(倍增)_i++

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 to k which starts from the vertex i;
  • mi — the minimal weight from all arcs on the path with length k which starts from the vertex i.

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 3 1 2 3 4 3 2 6 6 3 1 4 2 2 3



Output



10 1 8 1 7 1 10 2 8 2 7 1 9 3



Input



4 4 0 1 2 3 0 1 2 3



Output



0 0 4 1 8 2 12 3



Input



5 3 1 2 3 4 0 4 1 2 14 3



Output



7 1 17 1 19 2 21 3 8 1



举报

相关推荐

0 条评论