社区讨论

spfa 90pts求调

P3385【模板】负环参与者 3已保存回复 16

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
16 条
当前快照
1 份
快照标识符
@m0934ect
此快照首次捕获于
2024/08/25 12:44
2 年前
此快照最后确认于
2025/11/05 00:34
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>

using namespace std;
struct edge{
    int v,w;
};
vector<edge> e[2005];
int dis[2005];
queue<int> q;
int main()
{
    int T;
    scanf("%d",&T);
    for(;T;T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            e[i].clear();
            dis[i]=1e9;
        }
        while(!q.empty())
            q.pop();

        for(int i=1;i<=m;i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            if(w>=0)
            {
                e[u].push_back((edge){v,w});
                e[v].push_back((edge){u,w});
            }
            else
                e[u].push_back((edge){v,w});
        }
        q.push(1);
        dis[1]=0;
        int cnt=0;
        bool flag=true;
        while(!q.empty())
        {
            cnt++;
            int f=q.front();
            q.pop();
            for(int i=0;i<e[f].size();i++)
            {
                int nxt=e[f][i].v;
                if(dis[f]+e[f][i].w<dis[nxt])
                {
                    q.push(nxt);
                    dis[nxt]=dis[f]+e[f][i].w;
                    //printf("\n%d \n\n",nxt);
                }
            }
            if(cnt>2*n)
            {
                printf("YES\n");
                flag=false;
                break;
            }
        }
        if(flag)
            printf("NO\n");
    }
}

回复

16 条回复,欢迎继续交流。

正在加载回复...