#include #include #include using namespace std; struct node { int idx; int distance; int money; node(){} node(int _idx, int _distance, int _money) { idx=_idx; distance=_distance; money=_money; } bool operator < (const node &tmp) const{ return distance > tmp.distance; } }; int main() { int s; int n,m; cin>>s>>n>>m; vectorv[n+1]; for(int i=0; i>a>>b>>c>>d; v[a].push_back(node(b,c,d)); v[b].push_back(node(a,c,d)); } int dis[n+1][s+1]; for(int i=0;ipq; pq.push(node(1,0,0)); while(!pq.empty()) { node c=pq.top(); pq.pop(); for(int i=0;i< v[c.idx].size(); i++) { int sosed = v[c.idx][i].idx; int d = v[c.idx][i].distance; int pari= v[c.idx][i].money; if(pari+c.money<=s) { if(d+c.distance