Submission #1156887

#TimeUsernameProblemLanguageResultExecution timeMemory
1156887irmuunRobot (JOI21_ho_t4)C++20
100 / 100
682 ms83144 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() const ll N=1e5+5; map<ll,vector<array<ll,3>>>g[N]; ll dp[N]; map<ll,ll>dp2[N],psum[N]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,m; cin>>n>>m; for(ll i=1;i<=m;i++){ ll a,b,c,p; cin>>a>>b>>c>>p; g[a][c].pb({b,c,p}); g[b][c].pb({a,c,p}); psum[a][c]+=p; psum[b][c]+=p; } priority_queue<array<ll,3>,vector<array<ll,3>>,greater<array<ll,3>>>pq; const ll inf=(ll)1e18; fill(dp,dp+N,inf); pq.push({0,1,0}); dp[1]=0; while(!pq.empty()){ auto [cost,x,c]=pq.top(); pq.pop(); if(c!=0){ if(dp2[x][c]!=cost) continue; for(auto [y,col,p]:g[x][c]){ ll case1=psum[x][col]-p; if(cost+case1<dp[y]){ dp[y]=cost+case1; pq.push({dp[y],y,0}); } } } else{ if(dp[x]!=cost) continue; for(auto edges:g[x]){ for(auto [y,col,p]:edges.second){ ll case1=psum[x][col]-p; if(cost+case1<dp[y]){ dp[y]=cost+case1; pq.push({dp[y],y,0}); } ll case2=p; if(cost+case2<dp[y]){ dp[y]=cost+case2; pq.push({dp[y],y,0}); } ll case3=cost; if(!dp2[y].count(col)||case3<dp2[y][col]){ dp2[y][col]=case3; pq.push({dp2[y][col],y,col}); } } } } } cout<<(dp[n]<inf?dp[n]:-1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...