思路:由于是一个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);
}
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.
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.
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).
Print n lines, the pair of integers si, mi in each line.
7 3 1 2 3 4 3 2 6 6 3 1 4 2 2 3
10 1 8 1 7 1 10 2 8 2 7 1 9 3
4 4 0 1 2 3 0 1 2 3
0 0 4 1 8 2 12 3
5 3 1 2 3 4 0 4 1 2 14 3
7 1 17 1 19 2 21 3 8 1