SPOJ KFSTB -帮助总司令:错误答案

SPOJ KFSTB - Help the Commander in Chief: Wrong Answer

本文关键字:错误 答案 总司令 帮助 KFSTB SPOJ      更新时间:2023-10-16

问题语句要求找出有向无环图中给定的源节点到目标节点的路径数。

我正在尝试使用dfs与dp进行优化来实现这一点。我已经尝试了几个小的测试用例,代码似乎工作得很好。我认为问题在于大型测试用例,但我不知道如何对它们进行测试。由于路径的数量可能很大,我们要使用取模。我的代码如下:

#include<iostream>
#include<vector>
#define MOD 1000000007
using namespace std;
typedef vector<long long int> vi;
typedef vector<vi> vii;
vii graph;
vi memo;
long long int dfs(int u, int t)
    {
        if(u==t)
            return 1;
        if((memo[u]%MOD)>0)
            return memo[u]%MOD;
        for(int i=0;i<(int)graph[u].size();i++)
        {
            long long int count = (dfs(graph[u][i], t))%MOD;
            memo[graph[u][i]] = (memo[graph[u][i]]%MOD + count%MOD)%MOD;
            cur_count = (cur_count%MOD + count%MOD)%MOD;
        }
        return cur_count%MOD;
    }
int main()
{
    int d, c, b , s, t, i, a1, a2;
    cin>>d;
    while(d--)
    {
        cin>>c>>b>>s>>t;
        graph.assign(c+1,vi());
        for(i=1;i<=b;i++)
        {
            cin>>a1>>a2;
            graph[a1].push_back(a2);
        }
        memo.assign(c+1, 0);
        memo[s] = dfs(s, t)%MOD;
        cout<<memo[s]<<endl;
    }   
    return 0;
}

函数dfs中:元素"i"的数组memo[]用于记忆,以记住从"i"节点到目的地的可能路径数。count变量获取正在访问的当前节点的路径数,即"i" and cur_count获取与节点"u"直接相连的所有节点的总路径

如果你能给我一些建议就太好了。

原始问题的链接在这里:http://www.spoj.com/problems/KFSTB/

如果你想要一些"窍门",这里有一些:

  1. 关键词:DAG
  2. 无自循环/多重边缘情况
  3. 这次不是关于I/O格式(空格,换行等)
  4. 为每个测试用例重新初始化!(特别是对于STL的东西,比如vector<>)
  5. 长长的
  6. 向后思考:从目的地到起点

如果你仍然卡住,要求更多:)