您的位置:首页 > 其它

POJ 1724 ROADS

2016-07-21 21:41 417 查看
ROADS

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: