#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pi pair<int,int>
#define vi vector<int>
#define pb push_back
#define all(a) a.begin(),a.end()
const int mxn = 1e5+1, mxa = 3e6;
vector<int> g[mxn], vec[mxn];
int pl[mxa],pr[mxa],st[mxa],node=0;
int cola[mxn],colb[mxn];
int par[mxn], root[mxn];
int find(int u){
if(par[u]<0) return u;
return par[u] = find(par[u]);
}
int update(int cur, int l, int r, int k){
if(!cur) cur = ++node;
if(l==r){st[cur]=1; return cur;}
int m = (l+r)>>1;
if(k <= m) pl[cur] = update(0,l,m,k);
else pr[cur] = update(0,m+1,r,k);
st[cur] = 1; return cur;
}
int merge(int cur1, int cur2){
if(!cur1) return cur2;
if(!cur2) return cur1;
pl[cur1] = merge(pl[cur1],pl[cur2]);
pr[cur1] = merge(pr[cur1],pr[cur2]);
st[cur1] = st[pl[cur1]] + st[pr[cur1]];
return cur1;
}
int get(int cur, int l, int r, int k){
if(!cur) return 0;
if(l==r) return st[cur];
int m = (l+r)>>1;
if(k <= m) return get(pl[cur],l,m,k);
else return get(pr[cur],m+1,r,k);
}
void solve(){
int n,m; cin >> n >> m;
fill(g+1,g+n+1,vi{});
fill(vec+1,vec+n+1,vi{});
fill(st+1,st+node+1,0);
fill(pl+1,pl+node+1,0);
fill(pr+1,pr+node+1,0);
fill(par+1,par+n+1,-1);
fill(root+1,root+n+1,0);
node = 0;
for(int i = 1; i <= n; i++) cin >> cola[i];
for(int j = 1; j <= n; j++){
cin >> colb[j];
vec[colb[j]].push_back(j);
}
for(int i = 1; i <= m; i++){
int u,v; cin >> u >> v;
g[u].pb(v); g[v].pb(u);
}
for(int i = 1; i <= n; i++){
if(cola[i] < colb[i]){
cout << "0\n"; return;
}
root[i] = update(0,1,n,cola[i]);
}
for(int i = 1; i <= n; i++){
for(auto u : vec[i]){
for(auto v : g[u]) if(colb[v] <= i){
int u1 = find(u), u2 = find(v);
if(u1==u2) continue;
if(par[u1]>par[u2]) swap(u1,u2);
par[u1] += par[u2]; par[u2] = u1;
root[u1] = merge(root[u1],root[u2]);
}
}
for(auto u : vec[i]){
int v = find(u);
if(get(root[v],1,n,i)==0){
cout << "0\n"; return;
}
}
}
cout << "1\n";
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int t = 1;
cin >> t;
for(int i = 0; i < t; i++){solve();}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |