难受,TLE+MLE+WA三重打击……
查看原帖
难受,TLE+MLE+WA三重打击……
738761
HappyDavid楼主2023/6/11 10:43

https://www.luogu.com.cn/record/112499619 下面是代码,大佬教一下吧QAQ~

#include <bits/stdc++.h>
using namespace std;
vector<int> to_node_number[100001];
int n, m;
int vis[100001];                                                                                                                                                    // 记忆化搜索
int A(int x, int depth)                                                                                                                                             // DFS (深度优先搜索)
{
    printf ("[wsDbg] [Line 8] [clock %d] vis[%d] = %d, depth = %d, to_node_number[%d].size() = %d\n", clock(), x, vis[x], depth, x, to_node_number[x].size());
    if (vis[x] != -1)                                                                                                                                               // 如果已经得到结果
    {
        return vis[x];                                                                                                                                              // 直接返回即可
    }
    int ans = -2147483647;
    for (int i = 0; i < to_node_number[x].size(); i++)
    {
        ans = max(ans, A(to_node_number[x][i], depth + 1));
    }
    if (to_node_number[x].size() == 0)                                                                                                                              // 如果是叶子节点
    {
        return depth;                                                                                                                                               // 直接返回深度。
    }
    vis[x] = ans;                                                                                                                                                   // 存储得到的结果
    return ans;
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;
        to_node_number[u].push_back(v);                                                                                                                             // 反向建边【暂时禁用】
    }
    memset (vis, -1, sizeof(vis));
    for (int i = 1; i <= n; i++)
    {
        cout << A(i, 1) << ' ';
    }
    cout << endl;
    return 0;
}
2023/6/11 10:43
加载中...