思索(该不会是若至错误吧)
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ind[5008];
int out[5008];
int vis[5008];
int num[5008];
int dp[5008][5008];
int flag=0;
queue<int > q;
const int mod = 80112002;
vector<int> dot[5008];
int main () {
int n,m,a,b,ans,sum=1;
cin>>n>>m;
for (int i=1; i<=m; i++) {
cin>>a>>b;
ind[a]++;
out[b]++;
dot[b].push_back(a);
}
// for(int i=1;i<=n;i++){
// for(int j=0;j<dot[i].size();j++){
// cout<<dot[i][j]<<" ";
// }
// cout<<endl;
// }
for(int i=1; i<=n; i++) {
if(ind[i]==0) {
q.push(i);
num[i]=1;
}
}
int now;
while(!q.empty()) {
now=q.front();
q.pop();
for(int j=0; j<dot[now].size(); j++) {
ind[dot[now][j]]--;
num[dot[now][j]]=(num[now]+num[dot[now][j]])%mod;
if(ind[dot[now][j]]==0)q.push(dot[now][j]);
}
}
for(int i=1; i<=n; i++) {
if(out[i]==0) ans = (ans + num[i]) % mod;;
}
cout<<ans;
}