1 solutions
-
0
C++ :
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 2e5 + 10, MOD = 1e9 + 7; typedef long long LL; int n, m; int p[N]; int l[N], r[N]; int find(int x) { if (x != p[x]) p[x] = find(p[x]); return p[x]; } int main() { cin >> n >> m; for (int i = 1; i <= n; ++ i ) p[i] = i; while (m -- ) { int a, b; cin >> a >> b; if (r[a] == b && l[b] == a) continue; if (r[a] || l[b] || find(a) == find(b)) { cout << 0 << endl; return 0; } r[a] = b, l[b] = a; a = find(a), b = find(b); p[a] = b; } int res = 1, k = 1; for (int i = 1; i <= n; ++ i ) if (find(i) == i) res = (LL)res * k ++ % MOD; cout << res << endl; return 0; }
- 1
Information
- ID
- 144
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By