Submission #1295690

#TimeUsernameProblemLanguageResultExecution timeMemory
1295690jahongirColors (RMI18_colors)C++20
0 / 100
71 ms1020 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...