Submission #1320543

#TimeUsernameProblemLanguageResultExecution timeMemory
1320543asafeRobot (JOI21_ho_t4)C++20
0 / 100
182 ms43380 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...