Submission #314318

#TimeUsernameProblemLanguageResultExecution timeMemory
314318amunduzbaevWerewolf (IOI18_werewolf)C++14
15 / 100
311 ms43492 KiB
//#include "grader.cpp"
#include "werewolf.h"
#include <bits/stdc++.h>
#define pb(n) push_back(n)
using namespace std;
const int N=3005;
vector<vector<int>>edges;
bool reached=0;
int l, h, used1[N],used2[N];
void dfs1(int v){
    used1[v]=1;
    for(auto x:edges[v]){
        if(x<l||used1[x]) continue;
        dfs1(x);
    }
}
void dfs2(int v){
    used2[v]=1;
    if(used1[v]&&used2[v]) {
        reached=1;
        return;
    }
    if(reached) return;
    for(auto x:edges[v]){
        if(x>h||used2[x]) continue;
        if(reached) return;
        dfs2(x);
    }
}
vector<int> check_validity(int n, vector<int> X, vector<int> Y, vector<int> s, vector<int> e, vector<int> low, vector<int> high) {
    int q=s.size(),m=X.size();
    edges.resize(n);
    for(int i=0;i<m;i++){
        edges[X[i]].pb(Y[i]);
        edges[Y[i]].pb(X[i]);
    }
    vector<int>a(q);
    for(int i=0;i<q;i++){
        l=low[i], h=high[i];
        if(s[i]>=l)
        dfs1(s[i]);
        reached=0;
        if(e[i]<=h)
        dfs2(e[i]);
        a[i]=reached;
        memset(used1,0,sizeof(used1));
        memset(used2,0,sizeof(used2));
    }
    return a;
}

/*

6 6 3
5 1
1 2
1 3
3 4
3 0
5 2
4 2 1 2
4 2 2 2
5 4 3 4

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...