Submission #989004

#TimeUsernameProblemLanguageResultExecution timeMemory
989004Celebi_276Robot (JOI21_ho_t4)C++17
100 / 100
730 ms84668 KiB
#include <bits/stdc++.h> using namespace std; #define FILE "TEST" #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define fi first #define se second const int MaxN = 1E5 + 15; const long long INF = 9E18; struct Edge { int to, c; long long d; }; map <int, vector <Edge>> G[MaxN]; long long dp[MaxN]; map <int, long long> f[MaxN], sumd[MaxN]; map <int, vector <Edge>>::iterator it; int n, m, u, v, c, d; typedef tuple <long long, int, int> T; signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if (fopen(FILE".INP", "r")) { freopen(FILE".INP", "r", stdin); freopen(FILE".OUT", "w", stdout); } cin >> n >> m; while (m--) { cin >> u >> v >> c >> d; G[u][c].push_back({v, c, d}); G[v][c].push_back({u, c, d}); sumd[u][c] += d; sumd[v][c] += d; } for (int i = 1; i <= n; i++) dp[i] = INF; dp[1] = 0; priority_queue <T> Q; Q.emplace(0, 1, 0); while (Q.size()) { long long w; int u, c; tie(w, u, c) = Q.top(); Q.pop(); if (c) { if (f[u][c] != -w) continue; for (Edge E : G[u][c]) { long long cost = sumd[u][c] - E.d - w; if (dp[E.to] > cost) { dp[E.to] = cost; Q.emplace(-dp[E.to], E.to, 0); } } } else { if (dp[u] != -w) continue; for (it = G[u].begin(); it != G[u].end(); it++) for (Edge E : it->second) { long long cost; cost = sumd[u][E.c] - E.d - w; if (dp[E.to] > cost) { dp[E.to] = cost; Q.emplace(-dp[E.to], E.to, 0); } cost = E.d - w; if (dp[E.to] > cost) { dp[E.to] = cost; Q.emplace(-dp[E.to], E.to, 0); } cost = -w; if (!f[E.to].count(E.c) || f[E.to][E.c] > cost) { f[E.to][E.c] = cost; Q.emplace(-f[E.to][E.c], E.to, E.c); } } } } cout << (dp[n] == INF ? -1 : dp[n]); return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:31:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |         freopen(FILE".INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:32:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |         freopen(FILE".OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...