18pts求调!大佬壶关!
查看原帖
18pts求调!大佬壶关!
914764
_z_z_c_楼主2024/1/21 20:16
#include<bits/stdc++.h>
using namespace std;

struct Edge{
    int v, w;
};

const int maxn=100099;
const int inf = 0x7fffffff;
vector<Edge> graph[maxn];
int d[maxn];


bool bellman_ford(int n, int s){
    bool flag;
    // initialize d
    for(int i=1;i<=n;i++){
        d[i]=inf;
    }
         d[s] = 0;

    for(int i=1; i<=n; i++){
        flag = false;
        for(int j=1; j<=n;j++){
            for(int k=0; k<graph[j].size();k++){
                Edge e = graph[j][k];
                int u = j;// start
                int v = e.v; // end
                int w = e.w;
                if(d[v] > d[u]+w){
                    d[v]=d[u]+w;
                    flag=1;
                }
            }
        }
        if(!flag) break;
    }
	return flag;
}

int main(){
    int t;
    int n, m;
    int u,v, w;
    cin>>t;
    while(t--){
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            cin>>u>>v>>w;
            Edge e;
            e.v = v;
            e.w = w;
            graph[u].push_back(e);      
        }
        if(bellman_ford(n,1)){
            cout<<"YES"<<endl;
        } else{
            cout<<"NO"<<endl;  
        }
    }
        
    return 0;
}
2024/1/21 20:16
加载中...