//teja349
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 
//setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//setfill -   cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//cout.precision(x)  cout<<fixed<<val;  // prints x digits after decimal in val

using namespace std;
using namespace __gnu_pbds;

#define f(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) f(i,0,n)
#define fd(i,a,b) for(i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define vi vector< int >
#define vl vector< ll >
#define ss second
#define ff first
#define ll int
#define pii pair< int,int >
#define pll pair< ll,ll >
#define sz(a) a.size()
#define inf (1000*1000*1000+5)
#define all(a) a.begin(),a.end()
#define tri pair<int,pii>
#define vii vector<pii>
#define vll vector<pll>
#define viii vector<tri>
#define mod (1000*1000*1000+7)
#define pqueue priority_queue< int >
#define pdqueue priority_queue< int,vi ,greater< int > >
#define flush fflush(stdout) 
#define primeDEN 727999983
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

// find_by_order()  // order_of_key
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;

//vector<vi> adj(1234567),wt(1234567);
ll a[1234567],b[1234567],dist[1234567];
int getdist1(int st,int n){
	int i;
	rep(i,n){
		dist[i]=a[i];
	}
	dist[0]=0;
	ll mini=min(a[n-1],b[0]);
	f(i,1,n-1){
		mini=min(a[i]+b[i],mini);
	}
	dist[n-1]=mini;
	f(i,1,n-1){
		dist[i]=min(dist[i],mini+b[i]);
	}
	return 0;
}
int getdist2(int st,int n){
	int i;
	rep(i,n){
		dist[i]=b[i];
	}
	dist[n-1]=0;
	ll mini=min(b[0],a[n-1]);
	f(i,1,n-1){
		mini=min(a[i]+b[i],mini);
	}
	dist[0]=mini;
	f(i,1,n-1){
		dist[i]=min(dist[i],mini+a[i]);
	}
	return 0;
}
int main(){
    std::ios::sync_with_stdio(false); cin.tie(NULL);
  	int t;
  	cin>>t;
  	//scanf("%d",&t);
  	while(t--){
  		int n;
  		cin>>n;
  		//scanf("%d",&n);
  		int i;
  		int flag=0;
  		rep(i,n){
  			cin>>a[i];
  			if(i!=0 && a[i]==0){
  				flag=1;
  			}
  			
  		}
  		rep(i,n){
  			cin>>b[i];
  			if(i!=n-1 && b[i]==0){
  				flag=1;
  			}
  			
  		}
  		getdist1(0,n);
  		
  		rep(i,n){
  			if(dist[i]!=a[i])
  				flag=1;
  		}
  		getdist2(n-1,n);
  		rep(i,n){
  			if(dist[i]!=b[i]){
  				flag=1;
  			}
  		}
  		if(flag!=1){
  			cout<<"Yes"<<endl;
  		}
  		else{
  			cout<<"No"<<endl;
  		}
  	}
    return 0;   
}