Submission #424390

#TimeUsernameProblemLanguageResultExecution timeMemory
424390Harry464Robot (JOI21_ho_t4)C++14
100 / 100
1741 ms116804 KiB
#include <iostream> #include <vector> #include <queue> #include <algorithm> #include <cmath> #include <utility> #include <set> #include <map> using namespace std; typedef long long ll; map<ll, vector <pair<ll, ll> > > adjl[100005]; map <ll, ll> boje[100005]; map <ll, ll> put[100005]; vector <set <ll> > post(100005); vector <vector <pair <ll, pair<ll, ll> > > > dadjl(100005); int main() { ll n, m; cin >> n >> m; for (int i = 0; i < m; i++){ ll u, v, c, p; cin >> u >> v >> c >> p; u--, v--; boje[u][c] += p; boje[v][c] += p; adjl[u][c].push_back(make_pair(v, p)), adjl[v][c].push_back(make_pair(u, p)); dadjl[u].push_back(make_pair(v, make_pair(c,p))), dadjl[v].push_back(make_pair(u, make_pair(c,p))); } vector <ll> mini(n + 1, 1000000000000000000); mini[0] = 0; priority_queue <pair <ll, pair<ll,pair<ll,ll> > > > dijk; dijk.push(make_pair(0, make_pair(0, make_pair(-1,0)))); while (dijk.size()){ ll pric = -dijk.top().first, u = dijk.top().second.first, ori = dijk.top().second.second.first, col = dijk.top().second.second.second; //if (pric == 0) //cout << u << endl; dijk.pop(); if (dadjl[u].size() == 0) continue; if (col > 0){ if (put[u][col] != pric) continue; for (pair <ll,ll> i : adjl[u][col]){ ll v = i.first, pri = i.second; ll prelaz = boje[u][col] - pri + pric; if (prelaz < mini[v]) mini[v] = prelaz, dijk.push(make_pair(-prelaz, make_pair(v, make_pair(u, 0)))); } } else { if (mini[u] != pric) continue; for (auto pp : dadjl[u]){ ll v = pp.first, c = pp.second.first, pri = pp.second.second; ll prelaz = min(pric + boje[u][c] - pri, pric + pri); // << prelaz << endl; if (prelaz < mini[v]) mini[v] = prelaz, dijk.push(make_pair(-prelaz, make_pair(v, make_pair(u, 0)))); if (!post[v].count(c) || pric < put[v][c]) post[v].insert(c), put[v][c] = pric, dijk.push(make_pair(-pric, make_pair(v, make_pair(u, c)))); } } } if (mini[n-1] == 1000000000000000000) cout << "-1"; else cout << mini[n-1]; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:50:67: warning: unused variable 'ori' [-Wunused-variable]
   50 |         ll pric = -dijk.top().first, u = dijk.top().second.first, ori = dijk.top().second.second.first, col = dijk.top().second.second.second;
      |                                                                   ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...