//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; }