第三个子任务前两个测试点WA,代码↓
#include <unordered_map>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
queue<int> q;
vector<int> e[100001];
unordered_map<int,int> dis;
signed int n,m,ans=1,ind[100001],a[100001],dp[100001][11];
signed main(void) {
scanf("%d%d",&n,&m);
register int i;
for(i=1;i<=n;i++)
scanf("%d",a+i);
for(int u,v;m--;ind[v]++,e[u].push_back(v))
scanf("%d%d",&u,&v);
for(i=1;i<=n;i++)
if(!ind[i])
dis[i]=a[i],
q.push(i),
dp[i][a[i]]=1;
register int x,j;
while(q.size()) {
x=q.front();
q.pop();
for(register int i: e[x])
if(!--ind[i]) {
for(j=1;j<=10;j++)
dp[i][j]=dp[x][j];
dis[i]=dis[x]*11+a[i],
q.push(i);
for(j=1;j<=a[i];j++)
ans=max(ans,dp[i][a[i]]=max(dp[i][a[i]],dp[x][j]+1));
}
}
printf("%d",ans);
return 0;
}