DDoS

DDoS

https://ac.nowcoder.com/acm/problem/201607

记忆化搜索

开始我还以为是一个最小生成树的题目,后面发现不是,他这里的边不起到作用,可以说是可有可无的,最后看来这就是一个深度优先搜索求到达终点可行边的数量

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const int mod = 20010905;

struct node
{
    int v, next;
} e[maxn << 1];
int f[maxn], tot, h[maxn];

void add(int u, int v) //链式前向星加边
{
    e[++tot].v = v;
    e[tot].next = h[u];
    h[u] = tot;
}

int dfs(int x) //记忆化搜索
{
    if (f[x])
        return f[x];
    for (int i = h[x]; i; i = e[i].next) //依次遍历该点的邻接点
        f[x] = (f[x] + dfs(e[i].v)) % mod;
    return f[x];
}
int main()
{
    int u, v, w, n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; ++i)
    {
        scanf("%d%d%d", &u, &v, &w);
        add(u, v);
    }
    f[n] = 1; //把终点置为1,如果到达终点一次就加1,代表一种可行的路径
    printf("%d\n", dfs(1));
}
牛客课后习题题解 文章被收录于专栏

等待蜕变

全部评论
你好我想请问一下,如果有两条路径耗时一样的话该怎么办?这样做不久会多算一条吗
点赞 回复 分享
发布于 2020-07-27 17:26

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务