P5960 【模板】差分约束(spfa)



由于题目没有说是连通图,所以最开始时要把所有点加入队列

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