Submission #1306127

#TimeUsernameProblemLanguageResultExecution timeMemory
1306127fafnirWerewolf (IOI18_werewolf)C++20
7 / 100
4094 ms21504 KiB
#include <bits/stdc++.h>
#include "werewolf.h"
using namespace std;

#define REP(i, n) for (int i = 0; i < (n); i++)

bool reachable(vector<vector<int>>& adjList, int start, int end, int lo, int hi) {
    const int N = adjList.size();
    vector<bool> vis(N, false);

    queue<int> q;
    if (start >= lo && start <= hi) {
        q.push(start);
        vis[start] = true;
    }
    while (!q.empty()) {
        int u = q.front();
        q.pop();

        for (auto& v : adjList[u]) {
            if (lo <= v && v <= hi && !vis[v]) {
                vis[v] = true;
                q.push(v);
            }
        }
    }

    return vis[end];
}

vector<int> check_validity(int N, vector<int> X, vector<int> Y,
                            vector<int> S, vector<int> E,
                            vector<int> L, vector<int> R) {
    int Q = S.size();
    int M = X.size();
    
    vector<int> A(Q);
    vector<vector<int> > adj(N);
    REP(i, M) {
        adj[X[i]].push_back(Y[i]);
        adj[Y[i]].push_back(X[i]);
    }

    REP(i, Q) {
        REP(v, N) {
            bool reach_S = reachable(adj, S[i], v, L[i], N-1);
            bool reach_E = reachable(adj, v, E[i], 0, R[i]);
            A[i] |= reach_S && reach_E;
        }
    }

    return A;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...