比赛 2025.3.29 评测结果 AAAAAAAAAA
题目名称 Analysis of Pathes in Functional Graph 最终得分 100
用户昵称 zqy 运行时间 2.348 s
代码语言 C++ 内存使用 64.63 MiB
提交时间 2025-03-29 09:47:15
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int n,to[N][40],g[N][40];
ll f[N][40],k;
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",&to[i][0]);
	for(int i=1;i<=n;i++)scanf("%lld",&f[i][0]),g[i][0]=f[i][0];
	for(int i=1;i<=39;i++){
		for(int j=1;j<=n;j++){
			to[j][i]=to[to[j][i-1]][i-1];
			f[j][i]=f[j][i-1]+f[to[j][i-1]][i-1];
			g[j][i]=min(g[j][i-1],g[to[j][i-1]][i-1]);
		}
	}
	for(int i=1,x;i<=n;i++){
		int ans1=1e9;ll ans2=0;x=i;
		for(int j=39;j>=0;j--){
			if((k>>j)&1){
				ans1=min(ans1,g[x][j]);
				ans2+=f[x][j];
				x=to[x][j];
			}
		}
		printf("%lld %d\n",ans2,ans1);
	}
	return 0;
}