#include<iostream>
#include<cstring>
using namespace std;
#define int long long
const int N=2e5+5;
int p[N],a[N],sa,sb,t,n,k,v,ans,res,c_len,c_sum;
bool st[N];
void dfs(int now,int u,int tot,int k)
{
res=max(res,tot+(k-u)*a[now]),st[now]=true;
if(u==k)
return;
if(!st[p[now]])
dfs(p[now],u+1,tot+a[p[now]],k);
else
c_len=u,c_sum=tot;
}
void init(int n)
{
for(int i=1;i<=n;i++)
st[i]=false;
}
int solve(int sx)
{
init(n),ans=0,res=0,c_len=0,c_sum=0;
dfs(sx,1,a[sx],k),ans=max(res,ans),res=0;
if(c_len)
init(n),dfs(sx,1,a[sx],k%c_len),ans=max(ans,res+k/c_len*c_sum);
return ans;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>t;
while(t--)
{
cin>>n>>k>>sa>>sb;
for(int i=1;i<=n;i++)
cin>>p[i];
for(int i=1;i<=n;i++)
cin>>a[i];
v=solve(sa)-solve(sb);
if(!v)
cout<<"Draw\n";
else if(v>0)
cout<<"Bodya\n";
else
cout<<"Sasha\n";
}
}
这为什么会WA on2,样例是过了的,感觉写的挺清楚的啊?