This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |