Submission #1260258

#TimeUsernameProblemLanguageResultExecution timeMemory
1260258SalihSahinColors (RMI18_colors)C++20
47 / 100
3094 ms12372 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int LIM = 150001;
vi edges[LIM];
vi a(LIM),b(LIM),par(LIM),vis(LIM);
 
int dfs(int node,const int x) {
    vis[node] = 1;
    if (a[node] == x) return node;
    for (auto it : edges[node]) {
        if (vis[it]) continue;
        if (a[it] < x || b[it] > x) continue;
        par[it] = node;
        int y = dfs(it,x);
        if (y) return y;
    }
    return 0;
}
 
 
void solve() {
    int n,m;
    cin >> n >> m;
    for (int i=1;i<=n;i++) edges[i].clear();
    for (int i=1;i<=n;i++) cin >> a[i];
    for (int i=1;i<=n;i++) cin >> b[i];
    for (int i=1;i<=m;i++) {
        int x,y;
        cin >> x >> y;
        edges[x].push_back(y);
        edges[y].push_back(x);
    }
    for (int i=1;i<=n;i++) {
        if (a[i] < b[i]) {
            cout << 0 << '\n';
            return;
        }
    }
    vi lst;
    while (1) {
        int mx = 0;
        int select = 0;
        for (int i=1;i<=n;i++) {
            if (a[i] != b[i] && b[i] > mx) {
                mx = b[i];
                select = i;
            }
        }
        if (!select) break;
        vis.assign(n+1,0);
        int help = dfs(select,mx);
        if (help == 0) {
            cout << 0 << '\n';
            return;
        }
        int cur = help;
        lst.clear();
        while (cur != select) {
            lst.push_back(cur);
            cur = par[cur];
        }
        lst.push_back(select);
        for (auto it : lst) a[it] = a[help];
    }
    cout << 1 << '\n';
} 
 
signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    cin >> t;
    while (t --> 0) 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...