제출 #601516

#제출 시각아이디문제언어결과실행 시간메모리
601516jairRSWerewolf (IOI18_werewolf)C++17
0 / 100
298 ms524288 KiB
#include "werewolf.h" #include "bits/stdc++.h" using namespace std; using vi = vector<int>; using vvi = vector<vi>; using pii = pair<int, int>; const int INF = 1e9; vi check_validity(int N, vi X, vi Y, vi S, vi E, vi L, vi R) { vvi adj = vvi(N); vvi highestOnPath = vvi(N, vi(N, INF)); for (int i = 0; i < N; i++) { adj[X[i]].push_back(Y[i]); adj[Y[i]].push_back(X[i]); } priority_queue<pii, vector<pii>, greater<pii>> pqueue; for (int i = 0; i < N; i++) { pqueue.push({i, i}); highestOnPath[i][i] = i; while (!pqueue.empty()) { int cur = pqueue.top().second; if (pqueue.top().first > highestOnPath[i][cur]) continue; pqueue.pop(); for (int a : adj[cur]) if (max(highestOnPath[i][cur], a) < highestOnPath[i][a]) { highestOnPath[i][a] = max(highestOnPath[i][cur], a); pqueue.push({highestOnPath[i][a], a}); } } } int Q = S.size(); vi ans(Q); for (int i = 0; i < Q; i++) { vector<int> visited(N, false); queue<int> queue; queue.push(S[i]); visited[S[i]] = true; while (!queue.empty()) { int cur = queue.front(); queue.pop(); if (cur < L[i]) continue; if (highestOnPath[cur][E[i]] <= R[i]) ans[i] = 1; for (int a : adj[cur]) { if (visited[a]) continue; queue.push(a); visited[a] = true; } } } 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...