最短路水题,,如果货币在转换中能涨价就不用再判断了。。
#include "string"
#include "iostream"
#include "cstdio"
#include "cmath"
#include "set"
#include "queue"
#include "vector"
#include "cctype"
#include "sstream"
#include "cstdlib"
#include "cstring"
#include "stack"
#include "ctime"
#include "algorithm"
#define pa pair<int,int>
#define Pi M_PI
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
using namespace std;
typedef long long LL;
const int M=150;
#define pid pair<int,double>
vector<pid>u[M];
vector<pid>v[M];
bool vis[M];
double w[M];
int n,m,x;
double s;
void spfa(int t)
{
memset(vis,false,sizeof(vis));
memset(w,0.0,sizeof(w));
w[t]=s;
vis[t]=true;
queue<int>q;
q.push(t);
while(!q.empty())
{
int uu=q.front();
q.pop();
vis[uu]=false;
for(int i=0;i<u[uu].size();++i)
{
int vv=u[uu][i].first;
double w1=u[uu][i].second;
double w2=v[uu][i].second;
double z=(w[uu]-w2)*w1;
if(z>w[vv])
{
w[vv]=z;
if(!vis[vv])
{
vis[vv]=true;
q.push(vv);
}
}
if(vv==t && w[vv]>s)
{
puts("YES");
return ;
}
}
}
puts("NO");
return ;
}
int main()
{
int a[50];
cin>>n>>m>>x>>s;
for(int i=0;i<n;++i)
{
u[i].clear();
v[i].clear();
}
vector<int>::iterator it;
while(m--)
{
int a,b;
double a1,b1,a2,b2;
cin>>a>>b>>a1>>a2>>b1>>b2;
if(a!=b)
{
u[a].push_back(pid(b,a1));
u[b].push_back(pid(a,b1));
v[a].push_back(pid(b,a2));
v[b].push_back(pid(a,b2));
}
}
spfa(x);
return 0;
}