45pts求助
查看原帖
45pts求助
1493769
Dreamweave楼主2025/6/27 11:01
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
int n, m;
int in[N], out[N];
int fa[N], ind[N], outd[N];
set<int> g[N];
int find(int x) {
	if (fa[x] == x) return x;
	else {
		fa[x] = find(fa[x]);
		return fa[x];
	}
}
void unionn(int x, int y) {
	int fx = find(x);
	int fy = find(y);
	if (fx == fy) return;
	fa[fy] = fx;
}
signed main() {
	cin >> n >> m;
	int x, y;
	for (int i = 1; i <= n; i++) fa[i] = i;
	while (m--) {
		cin >> x >> y;
		outd[x]++;
		ind[y]++;
		if(g[x].count(y)) continue;
		g[x].insert(y);
		if (find(x) == find(y)) {
			cout << 0;
			return 0;
		}
		unionn(x, y);
	}
	for (int i = 1; i <= n; i++) {
		if (outd[i] > 1 || ind[i] > 1) {
			cout << 0;
			return 0;
		}
	}
	int cnt = 0, sum = 1;
	for (int i = 1; i <= n; i++) {
		if (fa[i] == i) {
			cnt++;
		}
	}
	for (int i = 1; i <= cnt; i++) {
		sum = (sum * i) % mod;
	}
	cout << sum;
	return 0;
}
2025/6/27 11:01
加载中...