Submission #770355

# Submission time Handle Problem Language Result Execution time Memory
770355 2023-07-01T05:57:52 Z mgl_diamond Robot (JOI21_ho_t4) C++17
100 / 100
763 ms 81004 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
 
#define foru(i, l, r) for(int i=(l); i<=(r); ++i)
#define ford(i, l, r) for(int i=(l); i>=(r); --i)
#define fore(x, v) for(auto &x : v)
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
#define fi first
#define se second
 
void setIO(string name) {
  ios::sync_with_stdio(0);
  cin.tie(0); cout.tie(0);
  if (!name.empty()) {
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
  }
}
 
const ll LINF = 1e15;
const int N = 1e5+5;
const int M = 2e5+5;
 
int n, m;
map<int, vector<ii>> graph[N];
ll dp[N];
map<int, ll> dp2[N], sum[N];
 
int main() {
  setIO("");

  cin >> n >> m;

  foru(i, 1, m) {
    int u, v, c, p;
    cin >> u >> v >> c >> p;
    graph[u][c].emplace_back(v, p);
    graph[v][c].emplace_back(u, p);
    sum[u][c] += p;
    sum[v][c] += p;
  } 

  memset(dp, 0x3f, sizeof(dp));
  priority_queue<pair<ll, ii>> pq;
  dp[1] = 0;
  pq.push({0, {1, 0}});

  while (!pq.empty()) {
    auto top = pq.top(); pq.pop();

    ll cost = top.fi;
    int u = top.se.fi, c = top.se.se;

    if (!c) {
      if (-cost != dp[u]) continue;
      fore(nc, graph[u]) fore(info, nc.se) {
        int v = info.fi, p = info.se;
        ll ncost;

        ncost = sum[u][nc.fi] - p - cost;
        if (ncost < dp[v]) {
          dp[v] = ncost;
          pq.push({-ncost, {v, 0}});
        }

        ncost = p - cost;
        if (ncost < dp[v]) {
          dp[v] = ncost;
          pq.push({-ncost, {v, 0}});
        }

        ncost = -cost;
        if ((dp2[v].find(nc.fi) == dp2[v].end()) || ncost < dp2[v][nc.fi]) {
          dp2[v][nc.fi] = ncost;
          pq.push({-ncost, {v, nc.fi}});
        }
      }
    } 
    else {
      if (-cost != dp2[u][c]) continue;
      ll ncost = sum[u][c] - cost;
      fore(info, graph[u][c]) {
        int v = info.fi, p = info.se;
        if (ncost - p < dp[v]) {
          dp[v] = ncost - p;
          pq.push({-ncost + p, {v, 0}});
        }
      }
    }
  }

  cout << (dp[n] < LINF ? dp[n] : -1);
}

Compilation message

Main.cpp: In function 'void setIO(std::string)':
Main.cpp:18:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |     freopen((name + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:19:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |     freopen((name + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 8 ms 15188 KB Output is correct
2 Correct 7 ms 15196 KB Output is correct
3 Correct 7 ms 15188 KB Output is correct
4 Correct 7 ms 15188 KB Output is correct
5 Correct 7 ms 15188 KB Output is correct
6 Correct 7 ms 15188 KB Output is correct
7 Correct 8 ms 15320 KB Output is correct
8 Correct 7 ms 15188 KB Output is correct
9 Correct 10 ms 15692 KB Output is correct
10 Correct 9 ms 15708 KB Output is correct
11 Correct 10 ms 15444 KB Output is correct
12 Correct 9 ms 15444 KB Output is correct
13 Correct 11 ms 15504 KB Output is correct
14 Correct 9 ms 15428 KB Output is correct
15 Correct 8 ms 15312 KB Output is correct
16 Correct 9 ms 15444 KB Output is correct
17 Correct 9 ms 15456 KB Output is correct
18 Correct 8 ms 15316 KB Output is correct
19 Correct 9 ms 15380 KB Output is correct
20 Correct 8 ms 15444 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 125 ms 32192 KB Output is correct
2 Correct 55 ms 24164 KB Output is correct
3 Correct 108 ms 26896 KB Output is correct
4 Correct 84 ms 26340 KB Output is correct
5 Correct 761 ms 75408 KB Output is correct
6 Correct 578 ms 64272 KB Output is correct
7 Correct 269 ms 47656 KB Output is correct
8 Correct 269 ms 42464 KB Output is correct
9 Correct 327 ms 42464 KB Output is correct
10 Correct 258 ms 43944 KB Output is correct
11 Correct 89 ms 29132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 15188 KB Output is correct
2 Correct 7 ms 15196 KB Output is correct
3 Correct 7 ms 15188 KB Output is correct
4 Correct 7 ms 15188 KB Output is correct
5 Correct 7 ms 15188 KB Output is correct
6 Correct 7 ms 15188 KB Output is correct
7 Correct 8 ms 15320 KB Output is correct
8 Correct 7 ms 15188 KB Output is correct
9 Correct 10 ms 15692 KB Output is correct
10 Correct 9 ms 15708 KB Output is correct
11 Correct 10 ms 15444 KB Output is correct
12 Correct 9 ms 15444 KB Output is correct
13 Correct 11 ms 15504 KB Output is correct
14 Correct 9 ms 15428 KB Output is correct
15 Correct 8 ms 15312 KB Output is correct
16 Correct 9 ms 15444 KB Output is correct
17 Correct 9 ms 15456 KB Output is correct
18 Correct 8 ms 15316 KB Output is correct
19 Correct 9 ms 15380 KB Output is correct
20 Correct 8 ms 15444 KB Output is correct
21 Correct 125 ms 32192 KB Output is correct
22 Correct 55 ms 24164 KB Output is correct
23 Correct 108 ms 26896 KB Output is correct
24 Correct 84 ms 26340 KB Output is correct
25 Correct 761 ms 75408 KB Output is correct
26 Correct 578 ms 64272 KB Output is correct
27 Correct 269 ms 47656 KB Output is correct
28 Correct 269 ms 42464 KB Output is correct
29 Correct 327 ms 42464 KB Output is correct
30 Correct 258 ms 43944 KB Output is correct
31 Correct 89 ms 29132 KB Output is correct
32 Correct 86 ms 25156 KB Output is correct
33 Correct 85 ms 27492 KB Output is correct
34 Correct 317 ms 48104 KB Output is correct
35 Correct 209 ms 39636 KB Output is correct
36 Correct 246 ms 43372 KB Output is correct
37 Correct 276 ms 44936 KB Output is correct
38 Correct 329 ms 50956 KB Output is correct
39 Correct 94 ms 27720 KB Output is correct
40 Correct 289 ms 47824 KB Output is correct
41 Correct 303 ms 48092 KB Output is correct
42 Correct 405 ms 57816 KB Output is correct
43 Correct 137 ms 35792 KB Output is correct
44 Correct 234 ms 39180 KB Output is correct
45 Correct 234 ms 44588 KB Output is correct
46 Correct 202 ms 44620 KB Output is correct
47 Correct 261 ms 45184 KB Output is correct
48 Correct 763 ms 81004 KB Output is correct