#include<cstdio>
#include<cstring>
#define MAX_N 260
using namespace std;
int map[MAX_N][MAX_N];
int L[MAX_N][2];
double C[MAX_N][2];
double d[MAX_N],v;
int s,n,m,tot;
int Bellman_ford()
{
memset(d,0,sizeof(d));
d[s]=v;
for(int i=0;i<n;i++)
{
for(int j=0;j<tot;j++)
{
int from=L[j][0];
int to=L[j][1];
if(d[to]<(d[from]-C[j][1])*C[j][0])
{
d[to]=(d[from]-C[j][1])*C[j][0];
if(i==n-1)
return 1;
}
}
}
return 0;
}
int main()
{
int a,b;
double c,d,e,f;
scanf("%d%d%d%lf",&n,&m,&s,&v);
tot=0;
for(int i=0;i<m;i++)
{
scanf("%d%d%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f);
L[tot][0]=a;
L[tot][1]=b;
C[tot][0]=c;
C[tot][1]=d;
tot++;
L[tot][0]=b;
L[tot][1]=a;
C[tot][0]=e;
C[tot][1]=f;
tot++;
}
if(Bellman_ford())
printf("YES\n");
else
printf("NO\n");
}
poj 1860 判断是否有回路(不管是负权,还是正权,如果有回路必定会更新n次)
最新推荐文章于 2021-01-23 17:29:16 发布