#include<bits/stdc++.h>
using namespace std;
int a[200005],dp[200005],u[200005],v[200005],d[200005];
vector<int> g[200005];
int find(int u)
{
if(d[u]==u)return u;
return d[u]=find(d[u]);
}
int dfs(int u)
{
if(dp[u])return dp[u];
for(int v:g[u])dp[u]=max(dp[u],dfs(v)+1);
return dp[u];
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
d[i]=i;
}
for(int i=1;i<=m;i++)cin>>u[i]>>v[i];
for(int i=1;i<=m;i++)if(a[u[i]]==a[v[i]])d[u[i]]=d[v[i]]=max(d[u[i]],d[v[i]]);
for(int i=1;i<=n;i++)d[i]=find(d[i]);
for(int i=1;i<=m;i++)
{
if(a[u[i]]>a[v[i]])g[d[u[i]]].push_back(d[v[i]]);
if(a[u[i]]<a[v[i]])g[d[v[i]]].push_back(d[u[i]]);
}
dp[d[1]]=1;
cout<<dfs(n);
}
AC 45 WA 50样例全过了
看了一下发现应该是全AT唯一这么错的人