#include <vector> using namespace std; struct Edge{ Edge(int a_, int b_, double r_, double c_) : a(a_), b(b_), rate(r_), commi(c_){} int a, b; double rate, commi; }; const int arrSize = 210; int (){ int nEdge, nVertex, amoCur; double vCur; cin >> nVertex >> nEdge >> amoCur >> vCur; vector<Edge> edge; for(int i = 0; i < nEdge; ++i){ int a, b; cin >> a >> b; double r, c; cin >> r >> c; edge.push_back(Edge(a, b, r, c)); cin >> r >> c; edge.push_back(Edge(b, a, r, c)); } double dis[arrSize]; for(int i = 0; i < nEdge * 2; i++) dis[i] = 0; dis[amoCur] = vCur; for(int i = 0; i <= nVertex; i++){ bool flag = true; for(int j = 0; j < edge.size(); j++){ if(dis[edge[j].b] < (dis[edge[j].a] - edge[j].commi) * edge[j].rate){ dis[edge[j].b] = (dis[edge[j].a] - edge[j].commi) * edge[j].rate; flag = false; } } if(flag) break; if(i == nVertex){ cout << "YES" << endl; return 0; } } cout << "NO" << endl; return 0; }
|
近期评论