P1860

P1860

Bellman-Ford
看题看了半天..
#include  < iostream >
#include 
< vector >
#include 
< fstream >
using   namespace  std;

// ifstream fin("t1860.in");
struct  node
{
 
int u,v;
 
double r,c;
}
;
vector
< node >  edge_vec;
int  n,m,s;
int  f;
#define  eps 1e-8
double  v;
double  dist[ 200 ];
void  relax( int  x, int  y, double  r, double  c)
{
     
if (dist[y]+eps<(dist[x]-c)*r)
        
{f=1;dist[y]=(dist[x]-c)*r;}
}

bool  bellman()
{
     
for (int i=1;i<=n;i++)
        dist[i]
=0;
     dist[s]
=v;
    
    
while(dist[s]<=v+eps)
    
{
     f
=0;
     
for (int j=0;j<edge_vec.size();j++)
     
{
         node edge
=edge_vec.at(j);
         relax(edge.u,edge.v,edge.r,edge.c);    
     }

     
if (!f) break;
    }

   
if (dist[s]>v+eps) return true;
         
else return false;
    
}

int  main()
{
    cin
>>n>>m>>s>>v;
    
for (int i=1;i<=m;i++)
    
{
        
int x,y;
        
double rxy,cxy,ryx,cyx;
        cin
>>x>>y>>rxy>>cxy>>ryx>>cyx;
        node edge;
        edge.u
=x;
        edge.v
=y;
        edge.r
=rxy;
        edge.c
=cxy;
        edge_vec.push_back(edge);
        edge.u
=y;
        edge.v
=x;
        edge.r
=ryx;
        edge.c
=cyx;
        edge_vec.push_back(edge);
        
    }

        
    
if (bellman()) cout<<"YES"<<endl;
       
else
           cout
<<"NO"<<endl;
  
// system("pause");
    return 0;
}

你可能感兴趣的:(P1860)