sjrdlgzh @ 2024-08-30 12:25:38
只过了2、4、7拓扑
#include <bits/stdc++.h>
using namespace std;
int n, m;
int s,mark[1001];
vector<vector<int>> road(1001);int is[1001],isadd[1001][1001],du[10001],best[10001];
void dfs(int p,int k)//
{
if(k<=best[p])
{
return;
}
best[p]=k;
//cout<<p<<" "<<k<<endl;
for(int i=0;i<road[p].size();i++)
{
//cout<<"road:"<<road[p][i]<<endl;
dfs(road[p][i],k+1);
}
}
int main(){
cin >> n >> m;
for(int i=1;i<=m;i++)
{
int cnt=0;
memset(mark,sizeof(mark),0);
memset(is,sizeof(is),0);
cin>>s;
for(int j=1;j<=s;j++)
{
cin>>mark[j];
is[mark[j]]=1;
}
for(int z=mark[i];z<=mark[s];z++)// 起点-停靠终点所有站台
{
if(!is[z])//z不停
{
for(int j=1;j<=s;j++)// 所有停靠建图
{
if(!isadd[mark[j]][z])
{
road[mark[j]].push_back(z);
du[z]=1;
isadd[mark[j]][z]=1;
}
}
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=road[i].size();i++){
// //TODO
// cout<<road[i][j]<<" ";
// }
// cout<<endl;
// }
int ans=0;
for(int i = 1; i <= n; i ++)
{
if(du[i]==0)
{
dfs(i,1);
}
}
for(int i=1;i<=n;i++)
{
if(best[i]>ans)
{
ans=best[i];
}
}
cout<<ans;
return 0;
}