Submission #935006

#TimeUsernameProblemLanguageResultExecution timeMemory
935006BF001Robot (JOI21_ho_t4)C++17
100 / 100
974 ms97812 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define oo 1e18 #define N 100005 #define M 200005 #define fi first #define se second typedef pair<int, pair<int, pair<int, int>>> iii; struct ii { int v, c, cst; }; int n, d[N], m, cle[M], u[M], v[M], cl[M], cst[M]; vector<int> adj[N]; map<int, int> sum[N], d2[N]; map<int, vector<int>> adj2[N]; void ditra(){ for (int i = 1; i <= n; i++){ d[i] = oo; } priority_queue<iii, vector<iii>, greater<iii>> q; d[1] = 0; q.push({0, {1, {0, 0}}}); while (!q.empty()){ int du = q.top().fi; int uu = q.top().se.fi; int typ = q.top().se.se.se; int laste = q.top().se.se.fi; q.pop(); if (typ){ if (d2[uu][typ] != du) continue; for (auto x : adj2[uu][typ]){ int vv = v[x]; if (vv == uu) vv = u[x]; int d3 = sum[uu][typ] - cst[x] + du; if (d3 < d[vv]){ d[vv] = d3; q.push({d3, {vv, {x, 0}}}); } } } else { if (d[uu] != du) continue; for (auto x : adj[uu]){ int vv = v[x]; if (vv == uu) vv = u[x]; int cost = cst[x]; int clr = cl[x]; int d1 = du + sum[uu][clr] - cost; if (d1 < d[vv]){ d[vv] = d1; q.push({d1, {vv, {x, 0}}}); } int d22 = du + cost; if (d22 < d[vv]){ d[vv] = d22; q.push({d22, {vv, {x, 0}}}); } int d3 = du; if (d2[vv].count(clr) == 0 || d3 < d2[vv][clr]){ d2[vv][clr] = d3; q.push({d3, {vv, {x, clr}}}); } } } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> m; for (int i = 1; i <= m; i++){ //int u, v, c, cst; cin >> u[i] >> v[i] >> cl[i] >> cst[i]; adj[u[i]].push_back(i); adj[v[i]].push_back(i); sum[u[i]][cl[i]] += cst[i]; sum[v[i]][cl[i]] += cst[i]; adj2[u[i]][cl[i]].push_back(i); adj2[v[i]][cl[i]].push_back(i); } ditra(); int res = d[n]; if (res >= oo) cout << -1; else cout << res; }

Compilation message (stderr)

Main.cpp: In function 'void ditra()':
Main.cpp:36:7: warning: unused variable 'laste' [-Wunused-variable]
   36 |   int laste = q.top().se.se.fi;
      |       ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...