CCCPaste

Untitled

#include 
#include 
#include 
#include 
using namespace std ;
struct  node{
    int index,najmal_pat,money;

    node(int i,int p,int m){
        index = i;
        najmal_pat = p;
            money = m;
    }
    bool  operator < (const node &tmp)const {
        return najmal_pat > tmp.najmal_pat;
    }
};
int dist[3005][2005];
int main() {
int S, N , M;
cin >> S >> N >> M;
vector graph[N+5];
    for (int i = 0; i < M; i++) {
        int v,w,t,e;
        cin >> v >> w >> t >> e;
        graph[v].push_back(node(w,t,e));
        graph[w].push_back(node(v,t,e));
    }
    priority_queue pq;
    pq.push(node(1,0,0));
    for (int i = 0; i < 3005; i++) {
        for (int j = 0; j < 2005; j++) {
            dist[i][j] = 2e9;
        }
    }
    dist[1][0] = 0;
    while(!pq.empty()){
        node current = pq.top();
        pq.pop();

        for (int i = 0; i < graph[current.index].size(); i++) {
            int sosed = graph[current.index][i].index;
            int pat = graph[current.index][i].najmal_pat;
            int pari = graph[current.index][i].money;

            if(pari+current.money <= S && current.najmal_pat + pat < dist[sosed][pari+current.money]){
                dist[sosed][pari + current.money] = current.najmal_pat + pat;
                pq.push(node(sosed,current.najmal_pat +pat,current.money + pari));
            }
        }
    }
    int rezultat= 2e9;
    for (int i = 0; i <= S; i++) {
        rezultat = min(dist[N][i], rezultat);
    }
    if (rezultat == 2e9){
        cout << "-1";
    }
    else
        cout << rezultat << endl;
}