Submission #1315780

#TimeUsernameProblemLanguageResultExecution timeMemory
1315780the_commando_xWerewolf (IOI18_werewolf)C++17
15 / 100
4096 ms21480 KiB
#include "werewolf.h"
#include <queue>

std::vector<int> check_validity(int N, std::vector<int> X, std::vector<int> Y,
                                std::vector<int> S, std::vector<int> E,
                                std::vector<int> L, std::vector<int> R)
{
  int Q = S.size();

  std::vector<int> A(Q);
  for (int i = 0; i < Q; ++i)
  {
    A[i] = 0;
  }

  int M = X.size();

  std::vector<std::vector<int>> adj(N);
  for (int i = 0; i < M; ++i)
  {
    adj[X[i]].push_back(Y[i]);
    adj[Y[i]].push_back(X[i]);
  }

  for (int qi = 0; qi < Q; ++qi)
  {
    int s = S[qi], e = E[qi];
    int lo = L[qi], hi = R[qi];

    std::vector<bool> visS(N, false);
    std::queue<int> q1;
    visS[s] = true, q1.push(s);

    while (q1.size())
    {
      int u = q1.front();
      q1.pop();

      for (int v : adj[u])
        if (!visS[v] && v >= lo)
          visS[v] = true, q1.push(v);
    }

    std::vector<bool> visE(N, false);
    std::queue<int> q2;
    visE[e] = true, q2.push(e);

    while (q2.size())
    {
      int u = q2.front();
      q2.pop();

      for (int v : adj[u])
        if (!visE[v] && v <= hi)
          visE[v] = true, q2.push(v);
    }

    bool ok = false;
    for (int t = lo; t <= hi; ++t)
      if (visS[t] && visE[t])
      {
        ok = true;
        break;
      }

    A[qi] = ok;
  }

  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...