#include<bits/stdc++.h>
#define N (int)(1e3+1e1)
using namespace std;
int n,m,G[N][N],s,a[N],b[N],tp,ans,r[N];
bool vis[N];
struct node{int p,d;};
int bfs(int st){
int ans=0;
queue<node> q;
q.push({st,1});
vis[st]=true;
while(!q.empty()){
node no=q.front();
q.pop();
for(int i=1;i<=n;i++){
if(!vis[i] && G[no.p][i]==1){
q.push({i,no.d+1});
vis[G[no.p][i]]=true;
ans=max(ans,no.d+1);
}
}
}
return ans;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>s;
for(int j=1;j<=s;j++) cin>>a[j];
for(int j=1;j<=s-1;j++){
for(int k=a[j]+1;k<=a[j+1]-1;k++) b[++tp]=k;
}
for(int j=1;j<=s;j++){
for(int k=1;k<=tp;k++) G[a[j]][b[k]]=1,r[b[k]]++;//建边a[j]->b[k]
}
tp=0;
}
for(int i=1;i<=n;i++) if(r[i]==0){
memset(vis,false,sizeof(vis));
ans=max(ans,bfs(i));
}
cout<<ans<<endl;
return 0;
}
评测记录:
AC AC MLE MLE TLE
MLE MLE MLE TLE AC