#include<bits/stdc++.h>
using namespace std;
const int N = 100 + 10;
vector<int> g[N];
int n, m, u, v, ans, q[N], yes[N][N], f[N], d[N];
int find(int x){
if(f[x] == x) return x;
return f[x] = find(f[x]);
}
int toposort(){
int l = 0, r = 0;
for(int i=1;i<=n;i++) if(!d[i]) q[++r] = i;
while(l < r){
int u = q[++l];
if(l == r){
int i = 1;
for(i=1;i<=r;i++) if(!yes[u][q[i]]) break;//但凡这个图不连通,这只奶牛顺序就不确定
if(i == r + 1) ans++;//这只奶牛顺序确定啦!
}
for(int i=0;i<g[u].size();i++){
int v = g[u][i];
d[v]--;
if(!d[v]) q[++r] = v;
for(int j=1;j<=r;j++) if(yes[u][q[j]]) yes[i][q[j]] = 1;
}
}
return ans;
}
int main(){
cin >> n >> m;
for(int i=1;i<=m;i++){
cin >> u >> v;
g[u].push_back(v);
d[v]++;
f[find(v)] = find(u);
}
int cnt = 0;
for(int i=1;i<=n;i++){
if(f[i] == i) cnt++;
yes[i][i] = 1;
if(cnt > 1){
cout << 0 << endl;
return 0;
}
}
cout << toposort() << endl;
return 0;
}
这个代码有什么毛病吗 QwQ?