佬来看看这个dfs的思路为什么不行吧
查看原帖
佬来看看这个dfs的思路为什么不行吧
1087763
YOUNGxy楼主2024/4/5 21:10

大概思路就是从第一个点跑dfs并记录下路径权值的和,当遇到一个已经被搜到过的点而且这个点之前记录下的和比现在的大,就认为存在负环。

void solve()
{
    int n,m;
    cin>>n>>m;
    vector<vector<pair<int,int>>> g(n+1);
    vector<int> ans(n+1,INF);
    for(int i=0;i<m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        g[a].push_back({b,c});
        if(c>=0) g[b].push_back({a,c});
    }

    bool flag=0;
    auto dfs=[&](auto self,int cur,int sum)->void
    {
        if(flag) return;
        if(ans[cur]!=INF) return void(flag=ans[cur]>sum);

        ans[cur]=sum;
        for(auto [to,val]:g[cur])
        {
            self(self,to,sum+val);
        }
    };

这个代码第二个测试集全过,第一个测试集只过三个。

2024/4/5 21:10
加载中...