Submission #1158205

#TimeUsernameProblemLanguageResultExecution timeMemory
1158205vladiliusRobot (JOI21_ho_t4)C++20
34 / 100
964 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second #define arr3 array<int, 3> #define arr5 array<ll, 5> const ll inf = 1e18; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin>>n>>m; vector<arr3> g[n + 1]; map<int, ll> mp[n + 1]; while (m--){ int x, y, c, w; cin>>x>>y>>c>>w; g[x].pb({y, c, w}); g[y].pb({x, c, w}); mp[x][c] += w; mp[y][c] += w; } queue<arr5> q; q.push({0, 1, 0, 0, 0}); vector<vector<ll>> dist(n + 1, vector<ll>(n + 1, inf)); dist[1][0] = 0; while (!q.empty()){ auto [d, v, C, W, P] = q.front(); q.pop(); if (d != dist[v][P]) continue; for (auto [u, c, w]: g[v]){ ll f = d + w; if (f < dist[u][v]){ dist[u][v] = f; q.push({f, u, c, w, v}); } ll s = (mp[v][c] - (c == C) * W) - w; f = d + s; if (f < dist[u][0]){ dist[u][0] = f; q.push({f, u, 0, 0, 0}); } } } ll out = inf; for (int i = 0; i <= n; i++){ out = min(out, dist[n][i]); } cout<<((out == inf) ? -1 : out)<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...