// 本题要在一个尽量大的数字格子上待着
// 不一定是最大的,可以枚举来实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 200010;
LL q[N],a[N];
LL t,n,k,pb,ps;
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> t;
while(t--)
{
cin >> n >> k >> pb >> ps;
for(int i=1;i<=n;i++)
cin >> q[i];
for(int i=1;i<=n;i++)
cin >> a[i];
LL s1=0,s2=0,t1=0,t2=0;
// 最多走n步,就会回到原点
// 多余的步数不用讨论了
for(int i=1,u1=pb,u2=ps;i<=min(n,k);i++)
{
t1+=a[u1],t2+=a[u2];
s1 = max(s1,t1+(LL)(k-i)*a[u1]);
s2 = max(s2,t2+(LL)(k-i)*a[u2]);
u1 = q[u1],u2 = q[u2];
}
if(s1==s2)
puts("Draw");
else if(s1>s2)
puts("Bodya");
else
puts("Sasha");
}
return 0;
}
感谢查看!!