// ROOT : DRAGON3012009 : WA in Real Life
#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 1000001
#define Bit(i) (1LL << i )
#define INF (1ll<<30)
#define NAME "file"
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;

ll n, m, q ;
ll a[MAXN] ;
vector<ll> adj[MAXN ] ;

pair<ll,ll> dfs(ll u, ll p, bool & check  ) {
    if(a[u]) {
        return {a[u], a[u] } ;
    }
    if(!check ) {
        return {-1, - 1 } ;
    }
    vector<pair<ll,ll>> seg ;
    for(ll v : adj[u]) if(v != p ) {
            seg.push_back(dfs(v, u, check ) ) ;
        }
    vector<pair<ll,ll> > sort_seg = seg ;
    sort(sort_seg.begin(), sort_seg.end() ) ;
    ll pp = -1 ;
    REP(i, sort_seg.size() ) if(sort_seg[0] == seg[i]) pp = i ;
    if(pp == -1 ) {
        check = false ;
        return {- 1, - 1 } ;
    }

    REP(i, sort_seg.size() - 1 ) if(sort_seg[i].se + 1 != sort_seg[i + 1].fi ) {
        check = false ;
        return {- 1, - 1 } ;
    }

    REP(i,  seg.size() ) if(sort_seg[i] != seg[ (i + pp ) % seg.size() ] ) {
        check = false ;
        return {-1, - 1 } ;
    }
    return {sort_seg.front().fi, sort_seg.back().se } ;
}

void init() {
    cin >> n ;
    FOR(i, 2, n ) {
        ll p ;
        cin >> p ;
        adj[i].push_back(p) ;
        adj[p].push_back(i) ;
    }
    FOR(i, 1, n ) cin >> a[i] ;
}

void solve() {
    bool check = true ;

    pair<ll,ll> res = dfs(1, 1, check ) ;
    ll k = 0;
    FOR(i, 1, n ) k = max(k, a[i]) ;
//    debug(check ) ;
//    debug(res.fi ) ;
//    debug(res.se ) ;
    if(check && res.fi == 1 && res.se == k ) cout << "yes" << el ;
    else cout << "no" << el ;

    FOR(i, 1, n ) adj[i].clear() ;
}


_ROOT_ {
//    freopen(NAME".inp", "r", stdin);
//    freopen(NAME".out", "w", stdout) ;
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    cin >> t ;
    while(t--) {
        init();
        solve();
    }
    return (0&0);
}