1 条题解

  • 0
    @ 2025-6-22 15:54:45

    记忆化搜索

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 5000;
    const int MOD = 80112002;
    int n, m;
    int inD[MAXN + 5]; // 记录每个点的入度
    vector<int> e[MAXN + 5];
    // f(u) 从 u 有多少条走到底的路径
    int book[MAXN + 5];
    int f(int u)
    {
        if (book[u] != 0)
            return book[u];
        int res = 0;
        for (int v : e[u])
            res = (res + f(v)) % MOD;
        if (res == 0)
            res = 1;
        return book[u] = res;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n >> m;
        for (int i = 1; i <= m; i++)
        {
            int u, v;
            cin >> u >> v;
            e[u].push_back(v);
            inD[v]++;
        }
        for (int i = 1; i <= n; i++)
            if (inD[i] == 0)
            {
                e[n + 1].push_back(i);
                inD[i]++;
            }
        cout << f(n + 1);
        return 0;
    }
    

    信息

    ID
    4698
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    4
    已通过
    3
    上传者