Submission #241933

#TimeUsernameProblemLanguageResultExecution timeMemory
241933abacabaWerewolf (IOI18_werewolf)C++14
15 / 100
4054 ms52284 KiB
#include <iostream> #include <string> #include <unordered_map> #include <unordered_set> #include <cstring> #include <chrono> #include <vector> #include <map> #include <random> #include <set> #include <algorithm> #include <math.h> #include <cstdio> #include <stdio.h> #include "werewolf.h" #include <queue> #include <bitset> #include <cstdlib> #include <deque> #include <cassert> #include <stack> using namespace std; #define mp make_pair #define f first #define se second #define pb push_back #define ppb pop_back #define emb emplace_back #define ll long long #define ull unsigned long long #define cntbit(x) __builtin_popcount(x) #define endl '\n' #define uset unordered_set #define umap unordered_map #define pii pair<int, int> #define ld long double #define pll pair<long long, long long> mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); template <typename T> inline T range(T l, T r) { return uniform_int_distribution<T>(l, r)(rng); } inline void setin(string s) { freopen(s.c_str(), "r", stdin); } inline void setout(string s) { freopen(s.c_str(), "w", stdout); } template <typename T> void Min(T &a, T b) { a = min(a, b); } template <typename T> void Max(T &a, T b) { a = max(a, b); } const int inf = 2e9; const int mod = 998244353; const int N = 4e5 + 15; int n, q; vector <int> g[N]; struct dsu { int p[N], sz[N]; dsu() { for(int i = 0; i < N; ++i) p[i] = i, sz[i] = 1; } int find(int v) { if(v == p[v]) return v; return p[v] = find(p[v]); } void unio(int a, int b) { a = find(a); b = find(b); if(a != b) { if(sz[a] < sz[b]) swap(a, b); p[b] = a; sz[a] += sz[b]; } } } dsu; struct query { int l, r, s, e, ind; bool operator < (const query &rhs) const { return r < rhs.r; } } qs[N]; inline void add(int v) { for(int to : g[v]) if(to < v) dsu.unio(to, v); } bool used[N]; bool dfs(int v, int l, int need) { used[v] = true; if(dsu.find(v) == need) return true; for(int to : g[v]) if(to >= l && !used[to]) { if(dfs(to, l, need)) return true; } return false; } vector<int> check_validity(int N, vector<int> X, vector<int> Y, vector<int> S, vector<int> E, vector<int> L, vector<int> R) { n = N; q = S.size(); vector<int> ans(q, 0); for(int i = 0; i < X.size(); ++i) g[X[i]].pb(Y[i]), g[Y[i]].pb(X[i]); for(int i = 0; i < q; ++i) qs[i] = {L[i], R[i], S[i], E[i], i}; sort(qs, qs + q); for(int i = 0, ptr = 0; i < q; ++i) { while(ptr < n && ptr <= qs[i].r) add(ptr++); memset(used, 0, sizeof(bool) * n); ans[qs[i].ind] = dfs(qs[i].s, qs[i].l, dsu.find(qs[i].e)); } return ans; }

Compilation message (stderr)

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:124:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     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...