记忆化搜索,题目样例对了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int const N=200005;
int n,m,a[N],b[N],c[N],d[N];
vector<int>v[N];
int f(int x,int s){
if(x==n){
return s;
}
if(b[x]!=-1)return b[x];
int ax=0;
for(int i=0;i<v[x].size();i++){
if(!d[v[x][i]]&&a[v[x][i]]>=a[x]){
c[a[v[x][i]]]++;
d[v[x][i]]=1;
ax=max(ax,f(v[x][i],s+(c[a[v[x][i]]]==1)));
c[a[v[x][i]]]--;
d[v[x][i]]=0;
}
}
b[x]=ax;
return ax;
}
int main(){
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int u,w;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
memset(b,-1,sizeof b);
while(m--){
cin>>u>>w;
v[u].push_back(w);
v[w].push_back(u);
}
cout<<f(1,1);
return 0;
}