拓扑排序50pts求调QAQ
查看原帖
拓扑排序50pts求调QAQ
928568
zhouzihan20110620楼主2024/12/14 10:01

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%50\% AC,后 50%50\% WA。

2024/12/14 10:01
加载中...