제출 #1344363

#제출 시각아이디문제언어결과실행 시간메모리
1344363nguyenkhangninh99Colors (RMI18_colors)C++20
17 / 100
81 ms1352 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int maxn = 2e5 + 5; 

int banhhe[maxn], sz[maxn], p[maxn], ok;
vector<pair<int, int>> st[4 * maxn];
vector<int> has[maxn], req[maxn];
vector<array<int, 3>> hist;

int find(int u){
    while(u != p[u]) u = p[u];
    return u;
}
void merge(int u, int v){
    u = find(u); v = find(v);
    if(u == v){
        hist.push_back({-1, -1, -1}); 
        return;
    }
    if(sz[u] < sz[v]) swap(u, v);
    hist.push_back({u, v, sz[u]});
    sz[u] += sz[v];
    p[v] = u;
}
void add(int id, int l, int r, int u, int v, int x, int y){
    if(v < l || r < u) return;
    if(u <= l && r <= v){
        st[id].push_back({x, y});
        return;
    }
    int mid = (l + r) / 2;
    add(id * 2, l, mid, u, v, x, y);
    add(id * 2 + 1, mid + 1, r, u, v, x, y);
}

void dfs(int id, int l, int r){
    for(auto [u, v]: st[id]) merge(u, v);

    if(l == r){ 
        for(int x: has[l]) banhhe[find(x)] = 1;
        for(int x: req[l]) ok &= (banhhe[find(x)]);
        for(int x: has[l]) banhhe[find(x)] = 0;
    }else{
        int mid = (l + r) / 2;
        dfs(2 * id, l, mid);
        dfs(2 * id + 1, mid + 1, r);
    }

    for(int i = 0; i < st[id].size(); i++){
        auto [u, v, x] = hist.back();
        hist.pop_back();
        if(x != -1) sz[u] = x, p[v] = v;
    }
}

void solve(){
    int n, m; cin >> n >> m;

    vector<int> a(n + 1), b(n + 1);
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1; i <= n; i++) cin >> b[i];

    ok = 1;
    for(int i = 1; i <= n; i++) ok &= (a[i] >= b[i]);
    for(int i = 1; i <= n; i++){
        has[a[i]].push_back(i);
        req[b[i]].push_back(i);
    }

    for(int i = 1; i <= m; i++){
        int u, v; cin >> u >> v;
        int l = max(b[u], b[v]), r = min(a[u], a[v]);
        if(l <= r) add(1, 1, n, l, r, u, v);
    }

    dfs(1, 1, n);
    cout << ok << "\n";
    for(int i = 1; i <= n; i++){
        has[i].clear();
        req[i].clear();
        sz[i] = 1;
        p[i] = i;
    }
    for(int i = 1; i <= 4 * n; i++) st[i].clear();
    hist.clear();
}

signed main(){
    ios_base::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);

    int t; cin >> t;
    while(t--) 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...