제출 #1273662

#제출 시각아이디문제언어결과실행 시간메모리
1273662ericl23302Robot (JOI21_ho_t4)C++20
100 / 100
928 ms79324 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = 1e18; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector<map<int, vector<pair<ll, pair<int, int>>>>> adjacency(n + 1); vector<map<int, ll>> sumOfColour(n + 1), dp(n + 1); vector<ll> dist(n + 1, INF); for (int i = 0; i < m; ++i) { int a, b, c; ll p; cin >> a >> b >> c >> p; adjacency[a][c].push_back({p, {b, c}}); adjacency[b][c].push_back({p, {a, c}}); sumOfColour[a][c] += p; sumOfColour[b][c] += p; } priority_queue<pair<ll, pair<int, int>>> pq; dist[1] = 0; pq.push({0, {1, 0}}); while (!pq.empty()) { auto [curCost, curAndColour] = pq.top(); pq.pop(); auto [cur, colour] = curAndColour; if (colour) { if (dp[cur][colour] != -curCost) continue; for (auto &edge : adjacency[cur][colour]) { ll curCase = sumOfColour[cur][colour] - edge.first - curCost; if (curCase < dist[edge.second.first]) { dist[edge.second.first] = curCase; pq.push({-curCase, {edge.second.first, 0}}); } } } else if (-curCost == dist[cur]) { for (auto &c : adjacency[cur]) { for (auto &edge : c.second) { ll curCase = sumOfColour[cur][edge.second.second] - edge.first - curCost; if (curCase < dist[edge.second.first]) { dist[edge.second.first] = curCase; pq.push({-curCase, {edge.second.first, 0}}); } curCase = edge.first - curCost; if (curCase < dist[edge.second.first]) { dist[edge.second.first] = curCase; pq.push({-curCase, {edge.second.first, 0}}); } curCase = -curCost; if (!dp[edge.second.first].count(edge.second.second) || curCase < dp[edge.second.first][edge.second.second]) { dp[edge.second.first][edge.second.second] = curCase; pq.push({-curCase, {edge.second.first, edge.second.second}}); } } } } } cout << (dist[n] == INF ? -1 : dist[n]) << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...