Submission #307545

# Submission time Handle Problem Language Result Execution time Memory
307545 2020-09-28T15:04:00 Z bigDuck Colors (RMI18_colors) C++14
47 / 100
1388 ms 524292 KB
#include<bits/stdc++.h>
using namespace std;
#define INIT  ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
//#define int ll

int ts, n, m, k, a[150010], b[150010], q, l, r;
vector<int> oa[150010], ob[150010];

struct query{
int l, r, u, v;
};
vector<query> seg[800010];



struct DSU{
int ptr[150010], sz[150010]; bool mrk[150010];
};
DSU dsu;


struct ch{
int u, v, t;
};
stack<ch> st;


int find_root(int x){ int cr=x; while(dsu.ptr[cr]!=cr){cr=dsu.ptr[cr];}return cr; }

void unite(int u, int v, int t){
    int ru=find_root(u), rv=find_root(v);
    if(ru==rv){return;}

    if(dsu.sz[ru]>=dsu.sz[rv]){
        dsu.ptr[rv]=ru; dsu.sz[ru]+=dsu.sz[rv];
        ch c; c.u=ru; c.v=rv; c.t=t; st.push(c);
    }
    else{
        dsu.ptr[ru]=rv; dsu.sz[rv]+=dsu.sz[ru];
        ch c; c.u=rv; c.v=ru; c.t=t; st.push(c);
    }

}

void separ(int u, int v){
dsu.ptr[v]=v; dsu.sz[u]-=dsu.sz[v];
return;
}

void roll_back(int t){
    while((!st.empty()) && ( ((st.top()).t)>=t)){
        auto c=st.top(); st.pop(); separ(c.u, c.v);
    }
    return;
}




void ins(int nod, query q0, int tl, int tr){
if((tl>q0.r) || (tr<q0.l)){return;}
if( (tl>=q0.l) && (tr<=q0.r) ){
    seg[nod].pb(q0);
}
if(tl==tr){return;}
int med=(tl+tr)/2;
ins(nod*2, q0, tl, med);
ins(2*nod+1, q0, med+1, tr);
}


void clean(){
    for(int i=1; i<=4*n; i++){
        seg[i].clear();
    }
}



bool rec(int nod, int tl, int tr, int t){
 bool res=true;
for(auto q0:seg[nod]){
    unite(q0.u, q0.v, t);
}
if(tl==tr){
    for(auto u:oa[tl]){
        int rt=find_root(u);
        dsu.mrk[rt]=true;
    }
    for(auto u:ob[tl]){
        int rt=find_root(u);
        if(!dsu.mrk[rt]){res=false; break;}
    }
    for(auto u:oa[tl]){
        int rt=find_root(u);
        dsu.mrk[rt]=false;
    }
    roll_back(t);
    return res;
}

int med=(tl+tr)/2;

bool r1=rec(nod*2, tl, med, t+1);
bool r2=rec(nod*2+1, med+1, tr, t+1);
roll_back(t);
return (r1&&r2);
}





int32_t main(){
INIT
cin>>ts;


while(ts--){
    cin>>n>>m;

    for(int i=1; i<=n; i++){dsu.ptr[i]=i; dsu.sz[i]=1; dsu.mrk[i]=false;}

    for(int i=1; i<=n; i++){cin>>a[i]; oa[a[i] ].pb(i);}
    for(int i=1; i<=n; i++){cin>>b[i]; ob[b[i] ].pb(i);}
    for(int i=1; i<=m; i++){
        int u, v; cin>>u>>v;
        query q0; q0.u=u; q0.v=v; q0.l=max(b[u], b[v]); q0.r=min(a[u], a[v]);
        ins(1, q0, 1, n);
    }
    bool res=rec(1, 1, n, 1);
    for(int i=1; i<=n;i++){
        if(a[i]<b[i]){res=false; break;}
    }
    cout<<res<<"\n";
    for(int i=1; i<=n; i++){ oa[i].clear(); ob[i].clear();}
    clean();
}



return 0;
}



# Verdict Execution time Memory Grader output
1 Correct 109 ms 26240 KB Output is correct
2 Correct 75 ms 26624 KB Output is correct
3 Correct 82 ms 46204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 163 ms 27256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 118 ms 26240 KB Output is correct
2 Correct 76 ms 26496 KB Output is correct
3 Correct 85 ms 40824 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 118 ms 26240 KB Output is correct
2 Correct 76 ms 26496 KB Output is correct
3 Correct 85 ms 40824 KB Output is correct
4 Correct 269 ms 26524 KB Output is correct
5 Runtime error 1388 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 109 ms 26240 KB Output is correct
2 Correct 75 ms 26624 KB Output is correct
3 Correct 82 ms 46204 KB Output is correct
4 Correct 118 ms 26240 KB Output is correct
5 Correct 76 ms 26496 KB Output is correct
6 Correct 85 ms 40824 KB Output is correct
7 Correct 125 ms 26444 KB Output is correct
8 Correct 82 ms 26616 KB Output is correct
9 Correct 133 ms 43744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 275 ms 26488 KB Output is correct
2 Runtime error 1149 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 87 ms 27128 KB Output is correct
2 Correct 84 ms 36600 KB Output is correct
3 Correct 115 ms 41080 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 109 ms 26240 KB Output is correct
2 Correct 75 ms 26624 KB Output is correct
3 Correct 82 ms 46204 KB Output is correct
4 Correct 163 ms 27256 KB Output is correct
5 Correct 118 ms 26240 KB Output is correct
6 Correct 76 ms 26496 KB Output is correct
7 Correct 85 ms 40824 KB Output is correct
8 Correct 269 ms 26524 KB Output is correct
9 Runtime error 1388 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
10 Halted 0 ms 0 KB -