SPFA求调
查看原帖
SPFA求调
1028442
linruizhe111楼主2024/7/17 20:26
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int n,m,d[100010],f[100010],vis[100010],l;
vector<pair<int ,int> > g[100010];
queue<int> q;
int main(){
    cin>>l;
    while(l--){
    cin>>n>>m;
    int u,v,w;memset(d,0x3f,sizeof(d));
    for(int i=1;i<=m;i++){
        
        cin>>u>>v>>w;  
        if(w>=0){
          g[u].push_back(make_pair(v,w));
          g[v].push_back(make_pair(u,w));
        }
        else    
          g[u].push_back(make_pair(u,w)); 
    }
    d[1]=0;
    f[1]=1;
    q.push(1);
    while(!q.empty()){
        int k=q.front();
        for(auto j:g[k]){
            if(d[j.first]>d[k]+j.second){
                d[j.first]=d[k]+j.second;
                if(f[j.first]==0){
                    f[j.first]=1;
                    q.push(j.first);
                    vis[j.first]++;
                    if(vis[j.first]>=n){cout << "YES"<<endl;break;}
                }
            }
        }
        f[k]=0;
        q.pop();
    }
    cout << "NO"<<endl;}
    return 0;
}

2024/7/17 20:26
加载中...