#include #include using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000000000000000 pair> get(auto E){ vector dis(E.size(),Inf); dis[0] = 0LL; priority_queue,vector>,greater>> Q; Q.emplace(0,0); vector last(E.size(),-1); while(Q.size()>0){ long long D = Q.top().first; int u = Q.top().second; Q.pop(); if(D!=dis[u])continue; rep(i,E[u].size()){ int v = E[u][i].first; long long DD = E[u][i].second; if(dis[v]>D+DD){ dis[v] = D+DD; Q.emplace(D+DD,v); last[v] = u; } } } vector ret(1,E.size()-1); while(ret.back()!=0){ ret.push_back(last[ret.back()]); } return make_pair(dis.back(),ret); } int main(){ int N,M; cin>>N>>M; vector E(N,vector>()); auto Ec = E; rep(i,M){ int u,v,c,d; scanf("%d %d %d %d",&u,&v,&c,&d); u--;v--; E[u].emplace_back(v,c); E[v].emplace_back(u,c); Ec[u].emplace_back(v,d); Ec[v].emplace_back(u,d); } long long ans = 0LL; //cout<<'a'<