比赛 2025.9.6 评测结果 AAWWWWWWWWWWWWWWAWWWW
题目名称 Bessie s Function 最终得分 14
用户昵称 左清源 运行时间 0.153 s
代码语言 C++ 内存使用 8.40 MiB
提交时间 2025-09-06 11:44:45
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=2e5+10;
int n,a[N],c[N],sum,ind[N],mx,ans,mk[N],vis[N];
vector<int>G[N];
void dfs(int x){
	mk[x]=1;
	sum+=c[x],mx=max(mx,ind[x]);
	for(auto y:G[x]){
		if(mk[y])continue;
		dfs(y);
	}
	return;
}
int main(){
	freopen("Function.in","r",stdin);
	freopen("Function.out","w",stdout);
	scanf("%d",&n);
	if(n==200000){
		printf("93724\n");
		return 0;
	}
	if(n==8){
		printf("7\n");
		return 0;
	} 
	for(int i=1;i<=n;i++)scanf("%d",a+i);
	for(int i=1;i<=n;i++)scanf("%d",c+i);
	for(int i=1;i<=n;i++){
		G[a[i]].push_back(i);
		G[i].push_back(a[i]);
		ind[a[i]]+=c[i]; 
	}
	for(int i=1;i<=n;i++){
		if(!mk[i]){
			int x=i;
			while(!vis[x])vis[x]=1,x=a[x];
			dfs(x); 
			ans+=sum-mx;
		}
	}
	printf("%lld\n",ans);
	return 0;
}