比赛 2025.3.29 评测结果 AAAAAAAAAA
题目名称 Analysis of Pathes in Functional Graph 最终得分 100
用户昵称 李金泽 运行时间 2.509 s
代码语言 C++ 内存使用 64.11 MiB
提交时间 2025-03-29 09:31:53
显示代码纯文本
#include<cstdio>
#define N 100005
#define ll long long
using namespace std;
int n,d[N],fa[N][41],m[N][41];ll k,s[N][41];
int min(int x,int y){return x<y?x:y;}
void init(){
    for(int k=1;k<41;k++)
        for(int i=1;i<=n;i++)
            fa[i][k]=fa[fa[i][k-1]][k-1],
            m[i][k]=min(m[i][k-1],m[fa[i][k-1]][k-1]),
            s[i][k]=s[i][k-1]+s[fa[i][k-1]][k-1];
}
void fd(int x){
    int t=0,mi=2147483647;ll n=k,su=0;
    while(n)
    {
        if(n&1)mi=min(mi,m[x][t]),su+=s[x][t],x=fa[x][t];
        t++;
        n>>=1;
    }
    printf("%lld %d\n",su,mi);
}
int main(){
    freopen("pathsjump.in","r",stdin);freopen("pathsjump.out","w",stdout);
    scanf("%d%lld",&n,&k);
    for(int i=1;i<=n;i++)scanf("%d",fa[i]);
    for(int i=1;i<=n;i++)scanf("%d",m[i]),s[i][0]=m[i][0];
    init();
    for(int i=1;i<=n;i++)fd(i);
    return 0;
}