voiddfs(int u,int fa){ int t = 0; for (int v : g[u]) if (v != fa) { dfs(v,u); if (!t) {t=v; continue;} if (f[t].size() < f[v].size()) std::swap(t,v); for (const Pr &now : f[v]) insert(f[t], now); } if (t) std::swap(f[u], f[t]); if (w[u]>0) insert(f[u], std::make_pair(0,w[u])); if (w[u]<0) sub(f[u], -w[u]); }
voidaddLine(int u, int v){ g[u].push_back(v); g[v].push_back(u); }
voidsolve(){ int N, t; scanf("%d%d", &N, &t); for (int i=1; i<=N; i++) scanf("%lld", &w[i]); for (int i=1; i<N; i++) { int u,v; scanf("%d%d", &u, &v); addLine(u, v); } w[N+1] = 2*INF; addLine(t, N+1);
dfs(1,0); if (!f[1].empty() && f[1].begin()->fir==0 && f[1].begin()->sec>INF) puts("escaped"); else puts("trapped");
for (int i=1; i<=N+1; i++) { g[i].clear(); f[i].clear(); } }
intmain(){ int T; scanf("%d",&T); while(T--) solve(); return0; }