比赛 2025.3.29 评测结果 AAAAAAAAAA
题目名称 Analysis of Pathes in Functional Graph 最终得分 100
用户昵称 彭欣越 运行时间 4.399 s
代码语言 C++ 内存使用 106.39 MiB
提交时间 2025-03-29 10:26:09
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
ll n,k,a[N][45],b[N][45],c[N][45];
ll query1(int idx,ll t) {
	ll res=0;
	while (t) {
		ll sum=1,cnt=0;
		while (sum<=t) {
			cnt++;
			sum<<=1;
    	}
	    cnt--;
    	sum>>=1;
    	res+=b[idx][cnt];
    	idx=a[idx][cnt];
    	t-=sum;
    }
    return res;
}
ll query2(int idx,ll t) {
	ll res=1e18+10;
	while (t) {
		ll sum=1,cnt=0;
		while (sum<=t) {
			cnt++;
			sum<<=1;
    	}
	    cnt--;
    	sum>>=1;
    	res=min(res,c[idx][cnt]);
    	idx=a[idx][cnt];
    	t-=sum;
    }
    return res;
}
int main () {
	freopen("pathsjump.in","r",stdin);
	freopen("pathsjump.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> k;
	for (int i=1;i<=n;i++) {
		cin >> a[i][0];
	}
	for (int i=1;i<=n;i++) {
		cin >> b[i][0];
		c[i][0]=b[i][0];
	}
	for (int i=1;i<=40;i++) {
		for (int j=1;j<=n;j++) {
			a[j][i]=a[a[j][i-1]][i-1];
		}
	}
	for (int i=1;i<=40;i++) {
		for (int j=1;j<=n;j++) {
			b[j][i]=b[j][i-1]+b[a[j][i-1]][i-1];
		}
	}
	for (int i=1;i<=40;i++) {
		for (int j=1;j<=n;j++) {
			c[j][i]=min(c[j][i-1],c[a[j][i-1]][i-1]);
		}
	}
	for (int i=1;i<=n;i++) {
		cout << query1(i,k) <<' '<< query2(i,k) <<endl;
	}
	return 0;
}