1 条题解

  • 0
    @ 2024-1-2 19:16:00
    #include <bits/stdc++.h>
    using namespace std;
    const long long MOD = 1000000007;
    const int maxn = 5050;
    int n, m, f[maxn], ans;
    long long c[maxn], sum;
    vector<int> g[maxn];
    bool vis[maxn];
    
    void dfs(int u) {
        if (vis[u]) return;
        vis[u] = true;
        f[u] = 0;
        c[u] = 1;
        for (auto v : g[u]) {
            dfs(v);
            if (f[u] < f[v] + 1) {
                f[u] = f[v] + 1;
                c[u] = c[v];
            }
            else if (f[u] == f[v] + 1) {
                c[u] = (c[u] + c[v]) % MOD;
            }
        }
    }
    
    int main() {
        cin >> n >> m;
        while (m --) {
            int u, v;
            cin >> u >> v;
            g[u].push_back(v);
        }
        for (int i = 1; i <= n; i ++) dfs(i);
        for (int i = 1; i <= n; i ++) {
            if (f[i] > ans) {
                ans = f[i];
                sum = c[i];
            }
            else if (f[i] == ans) {
                sum = (sum + c[i]) % MOD;
            }
        }
        cout << ans << " " << sum << endl;
        return 0;
    }
    
    
    • 1

    信息

    ID
    76
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    4
    已通过
    1
    上传者