思路:
blleman—ford检验负回路
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct infor{ int from; int to; double r; double c; }; infor es[20008]; double dis[200],v; int enu,n,s; bool bellman() { memset(dis,0,sizeof(dis)); dis[s]=v; for(int i=0;i<n;i++){ for(int j=0;j<enu;j++){ infor e=es[j]; if(dis[e.to]<(dis[e.from]-e.c)*e.r){ dis[e.to]=(dis[e.from]-e.c)*e.r; if(i==n-1)return true; } } } return false; } int main() { int m,a,b; enu=0; double rab,cab,rba,cba; cin>>n>>m>>s>>v; for(int i=0;i<m;i++){ cin>>a>>b>>rab>>cab>>rba>>cba; es[enu].from=a; es[enu].to=b; es[enu].r=rab; es[enu++].c=cab; es[enu].from=b; es[enu].to=a; es[enu].r=rba; es[enu++].c=cba; } if(bellman()) cout<<"YES"<<endl; else cout<<"NO"<<endl; }