#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vi vector<int>
#define pii pair<int,int>
#define vii vector<pair<int,int>>
#define vll vector<long long>
#define pb push_back
#define pll pair<long long ,long long>
#define pf push_front
#define ql cout<<endl;
#define f first
#define s second
#define int ll
const ll inf=1e18;
const int maxn= 1e5+5;
int n,m;
vector<tuple<int,int,int>> g[maxn];
unordered_map<int,int> neighbour[maxn];
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>m;
for(int i=0;i<m;i++){
int a,b,c,d;
cin>>a>>b>>c>>d;
g[a].pb({b,c,d});
g[b].pb({a,c,d});
neighbour[a][c]++;
neighbour[b][c]++;
}
priority_queue<pii,vii,greater<pii>>q;
vi dist(n+1,inf);
vi bt(n+1,0);
q.push({0,1});
dist[1]=0;
while(!q.empty()){
auto[du,u]=q.top();
q.pop();
if(bt[u])continue;
bt[u]=1;
for(auto[viz,color,price] : g[u]){
int d=(neighbour[u][color]>1 ? price : 0);
if(dist[viz]>du+d){
q.push({du+d,viz});
dist[viz]=du+d;
}
}
}
cout<<(dist[n]==inf ? -1 : dist[n]);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |