题目链接:
https://www.luogu.com.cn/problem/P4017
思路:
一道裸的求图的拓扑排序数量的题
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5005;
const int mod = 80112002;
int n, m;
queue<int> que;
int deg[maxn], cnt[maxn]; //入度 答案计数
vector<int> v[maxn]; //邻接表
void solve() {
int ans = 0;
while(!que.empty()) {
int now = que.front(); que.pop();
if(v[now].size() == 0) ans = (ans + cnt[now]) % mod;
for(int & x : v[now]) {
if(--deg[x] == 0) que.push(x);
cnt[x] = (cnt[x] + cnt[now]) % mod;
}
}
printf("%d", ans);
}
int main() {
#ifdef MyTest
freopen("Sakura.txt", "r", stdin);
#endif
scanf("%d %d", &n, &m);
while(m--) {
int a, b;
scanf("%d %d", &a, &b);
++deg[a];
v[b].push_back(a);
}
for(int i = 1; i <= n; ++i) {
if(deg[i] == 0) {
que.push(i);
cnt[i] = 1;
}
}
solve();
return 0;
}