EEOJ/OJ9/main.cpp

46 lines
1.1 KiB
C++
Raw Normal View History

2024-07-03 16:37:16 +00:00
#include<stdio.h>
#include<vector>
typedef struct{
int to;
int time;
int cost;
} path;
using namespace std;
int start,target;
int best_cost=2147483647;
int time_limit;
int m,n;
vector<path> graph[66000];
bool visited[66000]={0};
void dfs(short from,int time,int cost){
visited[from]=true;
for(auto i=graph[from].begin();i<graph[from].end();i++){
if(i->to==target){
if(time+i->time<=time_limit&&cost+i->cost<best_cost){
best_cost=cost+i->cost;
}
continue;
}
else if(time+i->time>time_limit||cost+i->cost>best_cost||visited[i->to]==true){
continue;
}
dfs(i->to,time+i->time,cost+i->cost);
}
visited[from]=false;
return;
}
int main(){
int from,to,time,cost;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d%d%d",&from,&to,&time,&cost);
graph[from].push_back({to,time,cost});
}
scanf("%d%d%d",&start,&target,&time_limit);
dfs(start,0,0);
if(best_cost==2147483647){
best_cost=-1;
}
printf("%d",best_cost);
return 0;
}