rt,代码:
#include <iostream>
#include <vector>
#include <queue>
#include <map>
using namespace std;
const int mod = 1e9 + 7;
long long n, m, a, b, depin[200005], visnum, rep, ans = 1;
vector <int> g[200005];
queue <int> q;
map <pair<int, int>, bool> apr;
int main()
{
cin >> n >> m;
for (int i = 1;i <= m;i++)
{
cin >> a >> b;
if (apr[{a, b}])
{
rep++;
continue;
}
g[a].emplace_back(b);
depin[b]++;
apr[{a, b}] = 1;
}
for (int i = 1;i <= n;i++)
{
if (!depin[i])
{
visnum++;
q.push(i);
}
if (depin[i] > 1 || g[i].size() > 1)
{
cout << 0;
return 0;
}
}
while (q.size())
{
int u = q.front();
q.pop();
for (int i = 0;i < g[u].size();i++)
{
int v = g[u][i];
depin[v]--;
visnum++;
q.push(v);
}
}
if (visnum != n)
{
cout << 0;
return 0;
}
for (int i = 1;i <= n - m - rep;i++)
{
ans *= i;
ans %= mod;
}
cout << ans;
return 0;
}
前 50% AC,后 50% WA。