Submission #1143536

#TimeUsernameProblemLanguageResultExecution timeMemory
1143536poltanosRobot (JOI21_ho_t4)C++20
0 / 100
244 ms51972 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e18; void solve(){ int n, m; cin >> n >> m; vector<vector<pair<int, int>>> adj(n); // { adj_node, cost } vector<multiset<int>> deg_col(n); vector<vector<int>> edges(m); // {x, y, wt, col} for(int i = 0; i < m; i++){ int x, y, col, wt; cin >> x >> y >> col >> wt; x--, y--; deg_col[x].insert(col); deg_col[y].insert(col); edges[i] = {x, y, wt, col}; } for(auto edge : edges){ int x = edge[0], y = edge[1], wt = edge[2], col = edge[3]; if(deg_col[x].count(col) == 1) adj[x].push_back({y, 0}); else adj[x].push_back({y, wt}); if(deg_col[y].count(col) == 1) adj[y].push_back({x, 0}); else adj[y].push_back({x, wt}); } vector<int> dist(n, inf); vector<int> processed(n, false); dist[0] = 0; priority_queue<pair<int, int>> q; q.push({0, 0}); while(!q.empty()){ int a = q.top().second; q.pop(); if(processed[a]) continue; processed[a] = true; for(auto [b, wt] : adj[a]){ if(dist[a] + wt < dist[b]){ dist[b] = dist[a] + wt; q.push({-dist[b], b}); } } } if(dist[n - 1] == inf){ cout << -1 << endl; return; } cout << dist[n - 1] << endl; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t = 1; while(t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...