Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1e5+10;
- int n,k,t;
- vector <int> level[N];
- vector <int> G[N];
- int check[N];
- int cnt=0;
- bool cycle=false;
- void dfs(int u){
- if(check[u]==2) return;
- if(check[u]==1){
- cycle=true;
- return;
- }
- check[u]=1;
- ++cnt;
- for(auto v:G[u])
- dfs(v);
- check[u]=2;
- }
- int main()
- {
- scanf("%d%d%d",&n,&k,&t);
- bool ch=false;
- for(int i=1;i<=n;++i){
- int l,p;
- scanf("%d%d",&l,&p);
- level[l].push_back(i);
- if(p==0) ch=true;
- for(int j=1;j<=p;++j){
- int q;
- scanf("%d",&q);
- G[i].push_back(q);
- }
- }
- if(!ch){
- printf("-1");
- return 0;
- }
- for(int i=1;i<=k;++i){
- for(auto v:level[i]){
- if(!check[v]) dfs(v);
- }
- if(cnt>t||cycle){
- printf("%d",i-1==0?-1:i-1);
- return 0;
- }
- }
- printf("%d",k);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement