poj1860

来源:互联网 发布:无线网络限速软件 编辑:程序博客网 时间:2024/04/30 04:47

#include<iostream>
#define esp 1e-8
using namespace std;
int n,m,s;
typedef struct E{
 int u;
 int v;
 double r;
 double c;};
E e[202];
double d[102];//d[i]是当前钱在第i种货币下的价值!!!
double money;

bool bellman_ford(int num){
 memset(d,0,sizeof(d));
 d[s]=money;
 while(d[s]<money+esp){
  bool flag=0;
  for(int i=0;i<num;i++)
   if(d[e[i].v]<(d[e[i].u]-e[i].c)*e[i].r){
    d[e[i].v]=(d[e[i].u]-e[i].c)*e[i].r;
     flag=1;}
   if(!flag)
   return d[s]>d[s]+esp;//没有正权环使得d[s]不断增加!!!
 }
 return true;//由于有正环使得钱不断增加,当d[s]大于原来值时退出循环!!!
}

int main(){
 bool flag=0;
 cin>>n>>m>>s>>money;
 int i;
 int num=0;
 int u,v;
 double ru,cu,rv,cv;
 for(i=0;i<m;i++){
  cin>>u>>v>>ru>>cu>>rv>>cv;
  e[num].u=u;e[num].v=v;e[num].r=ru;e[num++].c=cu;
  e[num].u=v;e[num].v=u;e[num].r=rv;e[num++].c=cv;}
 flag=bellman_ford(num);
 if(flag) cout<<"YES"<<endl;
 else cout<<"NO"<<endl;
 //system("pause");
 return 0;}

原创粉丝点击