Submission #383421

#TimeUsernameProblemLanguageResultExecution timeMemory
383421thiago4532Bitaro’s Party (JOI18_bitaro)C++17
14 / 100
2078 ms7916 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int n, m, q, dist[maxn], grau[maxn], grau2[maxn]; vector<int> grafo[maxn]; bool mark[maxn]; int main() { ios::sync_with_stdio(false), cin.tie(0); cin >> n >> m >> q; for (int i = 1; i <= m; i++) { int a, b; cin >> a >> b; if (a > b) swap(a, b); grafo[a].push_back(b); grau[b]++; } for (int i = 1; i <= q; i++) { memset(mark, 0, sizeof maxn); memset(dist, 0, sizeof maxn); memcpy(grau2, grau, sizeof maxn); int t, y; cin >> t >> y; vector<int> query(y); for (int i = 0; i < y; i++) cin >> query[i], mark[ query[i] ] = true; queue<int> fila; for (int i = 1; i <= n; i++) if (grau2[i] == 0) fila.push(i); while (!fila.empty()) { int u = fila.front(); fila.pop(); for(auto v : grafo[u]) { grau2[v]--; if (grau2[v] == 0) fila.push(v); if (dist[u] > 0 || !mark[u]) dist[v] = max(dist[v], dist[u] + 1); } } if (dist[t] == 0 && mark[t]) cout << "-1\n"; else cout << dist[t] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...