Submission #1016347

#TimeUsernameProblemLanguageResultExecution timeMemory
1016347lacitoWerewolf (IOI18_werewolf)C++14
15 / 100
177 ms19544 KiB
#include "werewolf.h"
using namespace std;

const int MAXN = 3000;

vector<int> g[MAXN];
vector<bool> vis1;
vector <bool> vis2;
int n, l, r;

void dfs1(int v, bool human) {
    vis1[v] = true;
    for (int u : g[v]) {
        if (!vis1[u]) {
            if (human && u >= l || !human && u <= r) { // werewolf condition
                dfs1(u, human);
            }
        }
    }
}

void dfs2(int v, bool human) {
    vis2[v] = true;
    for (int u : g[v]) {
        if (!vis2[u]) {
            if (human && u >= l || !human && u <= r) { // werewolf condition
                dfs2(u, human);
            }
        }
    }
}

int solve(int s, int e) {
    vis1.assign(n, false);
    vis2.assign(n, false);
    dfs1(s, true);
    dfs2(e, false);
    for (int i = 0; i < vis1.size(); ++i){
        if (vis1[i] && vis2[i]) return 1;
    }
    return 0;
}

vector<int> check_validity(int N, vector<int> X, vector<int> Y, vector<int> S, vector<int> E, vector<int> L, vector<int> R) {
    for (int i = 0; i < X.size(); i++) {
        // road between X[i] and Y[i]
        g[X[i]].push_back(Y[i]);
        g[Y[i]].push_back(X[i]);
    }
    n = N;
    int Q = S.size();
    vector<int> A(Q);
    for (int i = 0; i < Q; ++i) {
        l = L[i];
        r = R[i];
        A[i] = solve(S[i], E[i]);
    }
    return A;
}

Compilation message (stderr)

werewolf.cpp: In function 'void dfs1(int, bool)':
werewolf.cpp:15:23: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   15 |             if (human && u >= l || !human && u <= r) { // werewolf condition
      |                 ~~~~~~^~~~~~~~~
werewolf.cpp: In function 'void dfs2(int, bool)':
werewolf.cpp:26:23: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   26 |             if (human && u >= l || !human && u <= r) { // werewolf condition
      |                 ~~~~~~^~~~~~~~~
werewolf.cpp: In function 'int solve(int, int)':
werewolf.cpp:38:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<bool>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     for (int i = 0; i < vis1.size(); ++i){
      |                     ~~^~~~~~~~~~~~~
werewolf.cpp: In function 'std::vector<int> check_validity(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:45:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     for (int i = 0; i < X.size(); i++) {
      |                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...