KleinZh @ 2017-09-25 00:34:00
大佬的思维ORZ
by Erina @ 2017-10-09 12:47:17
#include<iostream>
#include<cstring>
using namespace std;
const int Size=1003;
int level[Size],road[Size];
bool d[Size][Size]; //d[i][j]: 第i个车站比第j个小
int n,m;
void dfs(int p) {
for(int i=1; i<=n; i++) {
if(d[p][i]) {
if(!level[i]) dfs(i);
level[p]=max(level[i],level[p]); //取i和p的最大值
}
}
level[p]++;
}
int main() {
std::ios::sync_with_stdio(false);
int len,now,maxlevel=0;
cin>>n>>m;
for(register int i=1; i<=m; i++) {
memset(road,0,sizeof(road));
cin>>len;
for(register int j=1; j<=len; j++)
cin>>road[j];
now=2;
for(register int j=road[1]+1; j<road[len]; j++) {
if(j==road[now]) {
now++;
continue;
}
for(register int k=1; k<=len; k++) {
d[j][road[k]]=true;
}
}
}
for(register int i=1; i<=n; i++) {
if(!level[i]) {
dfs(i);
}
}
for(register int i=1; i<=n; i++)
if(level[i]>maxlevel)
maxlevel=level[i];
cout<<maxlevel;
return 0;
}
用dfs居然过了!