好好学习
2026-03-29 09:02:17
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1;
int n,T,sy,sq;
long long p[N],a[N];
bool vis[N];
long long ans1,ans2;
void dfs1(int it,int step,long long ans){
vis[it]=true;
if(step>=T){
ans1=max(ans1,ans);
return;
}
if(!vis[p[it]]){
dfs1(p[it],step+1,ans+a[p[it]]);
}
ans1=max(ans1,ans+(T-step)*a[it]);
}
void dfs2(int it,int step,long long ans){
vis[it]=true;
if(step>=T){
ans2=max(ans2,ans);
return;
}
if(!vis[p[it]]){
dfs2(p[it],step+1,ans+a[p[it]]);
}
ans2=max(ans2,ans+(T-step)*a[it]);
}
int main(){
cin>>n>>T>>sy>>sq;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
cin>>a[i];
}
memset(vis,0,sizeof(vis));
dfs1(sy,1,a[sy]);
memset(vis,0,sizeof(vis));
dfs2(sq,1,a[sq]);
if(ans1>ans2) cout<<"YuiliceSeko!";
else if(ans1<ans2) cout<<"Nononononomeo~";
else cout<<"Okay,fine.";
return 0;
}
全部评论 3

2026-03-29 来自 浙江
1?

2026-03-29 来自 浙江
1
有啥用
2026-03-29 来自 广东
01+1=2
2026-03-29 来自 浙江
0





















有帮助,赞一个