从 1 到 n 花费不超过 k 的最短路
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<vector>
#include<math.h>
#include<stack>
using namespace std;
const int MAX = 100+10;
const double eps = 1e-10;
const double PI = acos(-1.0);
struct node
{
int v, l, w;
};
int k, n, r;
vector<node>graph[MAX];
void add(int u, int v, int l, int w)
{
node ver;
ver.v = v;
ver.l = l;
ver.w = w;
graph[u].push_back(ver);
}
bool operator < (node a, node b)
{
if(a.l!=b.l)return a.l>b.l;
return a.w>b.w;
}
int solve()
{
priority_queue<node>que;
node now;
now.l = 0;
now.w = 0;
now.v = 1;
que.push(now);
while(!que.empty())
{
now = que.top();
que.pop();
int u = now.v;
if(u==n)break;
for(int i = 0; i<(int)graph[u].size(); ++i)
{
node p = graph[u][i];
p.l+=now.l;
p.w+=now.w;
if(p.w<=k)que.push(p);
}
}
if(now.v==n)return now.l;
return -1;
}
int main()
{
int s, d, l, t;
cin>>k>>n>>r;
while(r--)
{
cin>>s>>d>>l>>t;
add(s, d, l, t);
}
cout<<solve()<<endl;
return 0;
}