Submission #1299341

#TimeUsernameProblemLanguageResultExecution timeMemory
1299341kawhietWerewolf (IOI18_werewolf)C++20
0 / 100
362 ms589824 KiB
#include <bits/stdc++.h> #include "werewolf.h" using namespace std; vector<vector<int>> g, mn, mx; vector<bool> vis; void dfs(int u) { vis[u] = 1; for (auto v : g[u]) { if (!vis[v]) { dfs(v); } } } 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 m = x.size(); mn.resize(n + 1, vector<int>(n + 1)); mx.resize(n + 1, vector<int>(n + 1)); auto get_max = [&](int s, int e) { int l = 1, r = n + 1; while (l + 1 < r) { int k = (l + r) / 2; g.assign(n + 1, {}); vis.assign(n + 1, 0); for (int i = 0; i < m; i++) { if (min(x[i], y[i]) >= k) { g[x[i]].push_back(y[i]); g[y[i]].push_back(x[i]); } } dfs(s); if (vis[e]) { l = k; } else { r = k; } } return l; }; auto get_min = [&](int s, int e) { int l = 0, r = n; while (l + 1 < r) { int k = (l + r) / 2; g.assign(n + 1, {}); vis.assign(n + 1, 0); for (int i = 0; i < m; i++) { if (max(x[i], y[i]) <= k) { g[x[i]].push_back(y[i]); g[y[i]].push_back(x[i]); } } dfs(s); if (vis[e]) { r = k; } else { l = k; } } return r; }; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { mx[i][j] = get_max(i, j); mn[i][j] = get_min(i, j); } } int q = S.size(); vector<int> ans(q); for (int i = 0; i < q; i++) { int s = S[i], e = E[i], l = L[i], r = R[i]; for (int j = l; j <= r; j++) { if (mx[s][j] >= l && mn[j][e] <= r) { ans[i] = 1; break; } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...