比赛 2025.3.29 评测结果 WWWWWWWWWW
题目名称 Analysis of Pathes in Functional Graph 最终得分 0
用户昵称 健康铀 运行时间 3.031 s
代码语言 C++ 内存使用 82.72 MiB
提交时间 2025-03-29 10:44:31
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int K = 40;

int nxt[200005];     
long long v[200005];  
long long x; 
int jmp[200005][K+1];  
long long s[200005][K+1], mn[200005][K+1];  

int main() {
	freopen("pathsjump.in","r",stdin);
	freopen("pathsjump.out","w",stdout);
    int n; cin >> n >> x;
    for(int u=1; u<=n; ++u) cin >> nxt[u], ++nxt[u];
    for(int u=1; u<=n; ++u) cin >> v[u];
    for(int k=1; k<=K; ++k)
        for(int u=1; u<=n; ++u)
            if(k == 1) {
                jmp[u][k] = nxt[u];
                s[u][k] = v[u];
                mn[u][k] = v[u];
            } else {
                jmp[u][k] = jmp[jmp[u][k-1]][k-1];
                s[u][k] = s[u][k-1] + s[jmp[u][k-1]][k-1];
                mn[u][k] = min(mn[u][k-1], mn[jmp[u][k-1]][k-1]);
            }
    for(int u=1; u<=n; ++u) {
        long long ts = 0, tmn = LONG_LONG_MAX;
        int p = u;
        for(long long b=x, k=1; b; b>>=1, ++k)
            if(b & 1) {
                ts += s[p][k];
                tmn = min(tmn, mn[p][k]);
                p = jmp[p][k];
            }
        cout << ts << " " << tmn << "\n";
    }
    return 0;
}