Submission #918017

#TimeUsernameProblemLanguageResultExecution timeMemory
918017imarnRobot (JOI21_ho_t4)C++14
100 / 100
1147 ms83308 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define vp vector<pii> using namespace std; const int N=1e5+5; ll d[N]; map<int,vector<pll>>g[N]; map<int,ll>sum[N]; map<ll,ll>dp[N]; int main(){ int n,m;cin>>n>>m; while(m--){ int a,b,c,d;cin>>a>>b>>c>>d; g[a][c].pb({b,d}); g[b][c].pb({a,d}); sum[a][c]+=d;sum[b][c]+=d; }d[1]=0;for(int i=2;i<=n;i++)d[i]=1e18; priority_queue<pair<pll,int>,vector<pair<pll,int>>,greater<pair<pll,int>>>q; q.push({{d[1],1},0}); while(!q.empty()){ auto u=q.top();q.pop(); if(u.s){ if(dp[u.f.s][u.s]!=u.f.f)continue; for(auto v:g[u.f.s][u.s]){ if(d[v.f]>u.f.f+sum[u.f.s][u.s]-v.s){ d[v.f]=u.f.f+sum[u.f.s][u.s]-v.s; q.push({{d[v.f],v.f},0}); } } }else { if(d[u.f.s]!=u.f.f)continue; for(auto it : g[u.f.s]){ for(auto v:it.s){ if(d[v.f]>u.f.f+min(v.s,sum[u.f.s][it.f]-v.s)){ d[v.f]=u.f.f+min(v.s,sum[u.f.s][it.f]-v.s); q.push({{d[v.f],v.f},0}); } if(dp[v.f].find(it.f)==dp[v.f].end()||dp[v.f][it.f]>u.f.f){ dp[v.f][it.f]=u.f.f;q.push({{dp[v.f][it.f],v.f},it.f}); } } } } }cout<<(d[n]>=1e18?-1:d[n]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...