RT。
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<int> v[200002];
queue<int> q;
int ind[200002];
int t,n;
int k,u;
int dp[200002];
bool topo(){
int cnt;
for(int i=1;i<=n;i++){
if(ind[i]==0){
q.push(i);
dp[i]=1;
cnt++;
}
}
while(!q.empty()){
int x=q.front();
q.pop();
for(auto y:v[x]){
dp[y]=max(dp[y],dp[x]+(x>y));
if(--ind[y]==0){
q.push(y);
cnt++;
}
}
}
return cnt<n;
}
int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
v[i].clear();
ind[i]=0;
dp[i]=-1;
}
for(int i=1;i<=n;i++){
cin>>k;
for(int j=1;j<=k;j++){
cin>>u;
v[u].push_back(i);
ind[i]++;
}
}
if(topo()) cout<<"-1\n";
else{
int maxn=0;
for(int i=1;i<=n;i++) maxn=max(maxn,dp[i]);
cout<<maxn<<endl;
}
}
return 0;
}
本地样例是对的,结果CF里面一个-1变成了0,求助万能的谷民