#include <bits/stdc++.h>
#define MOD 80112002
using namespace std;
#define MAXN 100005
int n, m;
int ans = 0;
vector<int>edge[MAXN];
queue<int>q;
int in[MAXN] = {0};
int out[MAXN];
int f[MAXN];
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
in[b]++;
out[a]++;
edge[a].push_back(b);
}
for (int i = 1; i <= n; i++) {
if (in[i] == 0) {
q.push(i);
f[i]=1;
}
}
while (!q.empty()) {
int x = q.front();
q.pop();
for (int i = 0; i < edge[x].size(); i++) {
int y = edge[x][i];
in[y]--;
f[y] = (f[x] + f[y]) % MOD;
if (in[y] == 0) {
q.push(y);
}
}
}
for (int i = 1; i <= n; i++) {
if (out[i] == 0) {
ans = (ans + f[i]) % MOD;
}
}
cout << ans;
}
拓扑排序ddd
最新推荐文章于 2024-05-28 12:11:29 发布