又是被水题吊打的一天
查看原帖
又是被水题吊打的一天
766675
da_ke楼主2023/10/3 23:16
#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=l;i<=r;++i)

using namespace std;

struct Edge{
    int from,to,w;
};

int n,m;

vector<Edge> linker[3023];
int dis[3023]; 

bool Bellman_ford(int s){
    rep(i,1,n)
        dis[i]=0x3f3f3f3f;
    dis[s]=0;
    bool fg;
    rep(i,1,n){
        fg=0;
        if(dis[i]==0x3f3f3f3f)
            continue;
        for(auto& j:linker[i])
        {
            if(dis[j.to]>dis[j.from]+dis[j.w])
                dis[j.to]=dis[j.from]+dis[j.w];
        }
        if(!fg)
            return 0;
    }
    return 1;
}

signed main(){
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m;
        rep(i,1,m){
            int u,v,w;
            cin>>u>>v>>w;
            linker[u].push_back((Edge){u,v,w});
            if(w>=0)
                linker[v].push_back((Edge){v,u,w});
        }
        cout<<(Bellman_ford(1)?"YES":"NO")<<endl;
        rep(i,1,n)
            for(auto& it:linker[i]);
    }
}
2023/10/3 23:16
加载中...