# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1124981 | alecurse | Bitaro’s Party (JOI18_bitaro) | C++17 | 0 ms | 0 KiB |
#include <iostream>
#include <vector>
using namespace std;
int N,M,Q;
vector<vector<int> > adj;
vector<bool> isin;
vector<bool> vis;
int trovaris(int x) {
if(vis[x])
return;
vis[x]=true;
int maxres=0;
for(auto b : adj[x]) {
int th = trovaris(b);
if(th==0&&isin[b])
continue;
maxres=max(maxres,th+1);
}
return maxres;
}
int main() {
cin>>N>>M>>Q;
adj.resize(N+1);
vis.resize(N+1);
isin.resize(N+1);
for(int i=0;i<M;i++) {
int a, b;
cin>>a>>b;
adj[b].push_back(a);
}
// for(int i=0;i<Q;i++) {
int nodo;
cin>>nodo;
int sizee;
cin>>sizee;
for(int i=0;i<sizee;i++) {
int th;
cin>>th;
isin[th]=true;
}
int risposta = trovaris(nodo);
if(risposta==0&&isin[nodo]) {
cout<<-1<<"\n";
} else {
cout<<risposta<<"\n";
}
// cout<<max
// }
}