#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10000+5;
int N,K,R;
int best[105][maxn],shortRoad=(1<<30),vis[maxn];
struct Point{
int to,L,T;
Point(int to,int L,int T): to(to),L(L),T(T){}
};
vector<Point> G[maxn];
void dfs(int u,int k,int cur)
{
if(cur>shortRoad) return;
if(best[u][k]<cur) return;
else best[u][k]=cur;
if(u==N) {
shortRoad=min(shortRoad,cur);
return;
}
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i].to,l=G[u][i].L,t=G[u][i].T;
if(k-t>=0) {
vis[v]=1;
dfs(v,k-t,cur+l);
vis[v]=0;
}
}
}
int main()
{
int s,e,l,t;
scanf("%d%d%d",&K,&N,&R);
for(int i=1;i<=R;i++)
{
scanf("%d%d%d%d",&s,&e,&l,&t);
G[s].push_back(Point(e,l,t));
}
memset(best,0x7f,sizeof(best));
vis[1]=1;
dfs(1,K,0);
cout<<shortRoad<<endl;
return 0;
}
POJ 1724 ROADS
最新推荐文章于 2020-10-03 16:35:31 发布