제출 #1306126

#제출 시각아이디문제언어결과실행 시간메모리
1306126fafnirWerewolf (IOI18_werewolf)C++20
0 / 100
4094 ms21500 KiB
// #define LOCAL 1 #include <bits/stdc++.h> #ifndef LOCAL #include "werewolf.h" #endif 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); } 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) { const int Q = L.size(); const int M = X.size(); vector<vector<int>> adj(N); REP(i, M) { adj[X[i]].push_back(Y[i]); adj[Y[i]].push_back(X[i]); } vector<int> r(Q, 0); REP(i, Q) { REP(u, N) { bool reach_S = reachable(adj, S[i], u, L[i], N-1); bool reach_E = reachable(adj, E[i], u, 0, R[i]); r[i] |= reach_S && reach_E; if (r[i]) {break;} } } return r; } #ifdef LOCAL int main() { int N = 6; vector<int> X{5,1,1,3,3,5}; vector<int> Y{1,2,3,4,0,2}; vector<int> S{4,4,5}; vector<int> E{2,2,4}; vector<int> L{1,2,3}; vector<int> R{2,2,4}; auto r = check_validity(N, X, Y, S, E, L, R); for_each(r.begin(), r.end(), [](int x) {cout << x << ' ';}); cout << '\n'; return 0; } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...