SPFA求负环模板,90分#11错了,求助!
查看原帖
SPFA求负环模板,90分#11错了,求助!
499682
operator_楼主2021/8/18 17:32
#include<bits/stdc++.h>
using namespace std;
struct edge{
	long long f,t,w;
};
long long t,n,m,x,y,z,inf=0xffffffff,d[6005];
edge a[6005];
int main()
{
    cin>>t;
    for(long long i=1;i<=t;i++)
    {
        long long k=0;
        cin>>n>>m;
        for(long long j=0;j<m;j++)
        {
        	cin>>x>>y>>z;
        	if(z>=0) 
        	{
        	    a[k++]={x,y,z};
        	    a[k++]={y,x,z};
        	}
        	else
        	    a[k++]={x,y,z};
        }
        for(long long j=0;j<=n;j++) 
    		d[j]=inf;
    	d[1]=0;
        for(long long j=1;j<n;j++)
            for(long long j=0;j<k;j++)
            	d[a[j].t]=min(d[a[j].t],d[a[j].f]+a[j].w);
        bool f=false;
        for(long long j=0;j<k;j++)
        {
            if(d[a[j].t]>d[a[j].f]+a[j].w)
                f=true;
        }
        if(f) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}
2021/8/18 17:32
加载中...