高校排名 - 题目详情 - 信友队 (xinyoudui.com)
WA80(不是TLE所以才绝望啊——
#include <bits/stdc++.h>
using namespace std;
int n,m,vis[1000];
int a[1000][1000];
vector<int> mp[1005];
int ans;
void dfs(int i,int l){
if(l<=vis[i]){
return;
}
vis[i]=l;
ans=max(ans,vis[i]);
//cout<<mp[i].size()<<" ";
if(mp[i].size()<1){
return;
}
for(int j=0;j<mp[i].size();j++){
//cout<<mp[i][j]<<" ";
dfs(mp[i][j],l+1);
}
}
bool ch(int x,int b){
for(int i=1;i<=m;i++){
if(a[i][x]>a[i][b]){
return false;
}
}
return true;
}
int main() {
cin>>n>>m;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
int x;
cin>>x;
a[i][x]=j;
}
}
for(int i=1;i<=n;i++){
//cout<<i<<" ";
for(int j=i+1;j<=n;j++){
if(ch(i,j)==true){
mp[i].push_back(j);
//cout<<j<<" ";
}
}
//cout<<"\n";
}
for(int i=1;i<=n;i++){
//cout<<mp[i].size()<<" ";
dfs(i,1);
}
printf("%d\n",ans);
return 0;
}