spfa


这道题要注意初始化w数组为最大值,并且w[1]=0;有负环的话输出YES,没有输出NO;

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int N=3000+5;
struct node{
int id,dis;
};

int n,m;
void bfs(vector<node>v[N]){
    int cnt[N]={0};
    int vis[N]={0};
    int w[N]={0};
    for(int i=1;i<=n;i++)w[i]=1e8;
    
    w[1]=0;
    queue<int>q;
    q.push(1);
    while(!q.empty()){
        int x=q.front();
        q.pop();
        vis[x]=0;
        for(int i=0;i<v[x].size();i++){
            node u=v[x][i];
            if(v[x][i].dis+w[x]<w[u.id]){
                w[u.id]=v[x][i].dis+w[x];
                cnt[u.id]=cnt[x]+1;
                if(cnt[u.id]>=n){
                    cout<<"YES"<<endl;
                    return ;
                }
                if(!vis[u.id]){
                    q.push(u.id);
                    vis[u.id]=1;
                }
            }
        }
    }
    cout<<"NO"<<endl;
    return;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        vector<node>v[N];
        cin>>n>>m;
        for(int i=1;i<=m;i++){
        int x,y,d;
        cin>>x>>y>>d;
        if(d>=0){
            v[x].push_back({y,d});
            v[y].push_back({x,d});
        }
        else v[x].push_back({y,d});
        }
        bfs(v);
    }
    return 0;
}
posted @   郭轩均  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示