1 solutions

  • 0
    @ 2025-11-27 11:59:57

    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