답안 #882861

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
882861 2023-12-03T23:14:27 Z MilosMilutinovic Wild Boar (JOI18_wild_boar) C++14
47 / 100
17032 ms 1048576 KB
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, t, l;
  cin >> n >> m >> t >> l;
  vector<vector<pair<int, int>>> g(n);
  for (int i = 0; i < m; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    --x; --y;
    g[x].emplace_back(y, z);
    g[y].emplace_back(x, z);
  }
  vector<int> seq(l);
  for (int i = 0; i < l; i++) {
    cin >> seq[i];
    --seq[i];
  }
  {
    int p, x;
    cin >> p >> x;
    --p; --x;
    seq[p] = x;
  }
  vector<int> deg(n);
  for (int i = 0; i < n; i++) {
    deg[i] = (int) g[i].size();
  }
  vector<vector<int>> idx(n, vector<int>(n));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < deg[i]; j++) {
      idx[i][g[i][j].first] = j;
    }
  }
  const long long inf = (long long) 1e18;
  vector<vector<vector<vector<long long>>>> dist(n, vector<vector<vector<long long>>>(n));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      dist[i][j].resize(deg[i]);
      for (int k = 0; k < deg[i]; k++) {
        dist[i][j][k] = vector<long long>(deg[j], inf);
      }
    }
  }
  for (int ver = 0; ver < n; ver++) {
    for (int e = 0; e < deg[ver]; e++) {
      vector<vector<long long>> d(n);
      for (int i = 0; i < n; i++) {
        d[i] = vector<long long>(deg[i], inf);
      }
      int to = g[ver][e].first;
      int w = g[ver][e].second;
      d[to][idx[to][ver]] = w;
      set<tuple<long long, int, int>> st;
      st.emplace(d[to][idx[to][ver]], to, idx[to][ver]);
      vector<int> cnt(n);
      while (!st.empty()) {
        auto it = st.begin();
        int v = get<1>(*it);
        int lst = get<2>(*it);
        st.erase(it);
        cnt[v] += 1;
        if (cnt[v] >= 3) {
          continue;
        }
        for (int i = 0; i < deg[v]; i++) {
          if (i == lst) {
            continue;
          }
          int to = g[v][i].first;
          int w = g[v][i].second;
          if (d[to][idx[to][v]] > d[v][lst] + w) {
            if (d[to][idx[to][v]] != inf) {
              st.erase(st.find({d[to][idx[to][v]], to, idx[to][v]}));
            }
            d[to][idx[to][v]] = d[v][lst] + w;
            st.emplace(d[to][idx[to][v]], to, idx[to][v]);
          }
        }
      }
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < deg[i]; j++) {
          dist[ver][i][e][j] = d[i][j];
        }
      }
    }
  }
  vector<vector<vector<vector<int>>>> good(n, vector<vector<vector<int>>>(n));
  int cnt_edges = 0;
  for (int from = 0; from < n; from++) {
    for (int to = 0; to < n; to++) {
      if (from == to) {
        continue;
      }
      good[from][to].resize(deg[from]);
      vector<int> order(deg[to]);
      iota(order.begin(), order.end(), 0);
      for (int i = 0; i < deg[from]; i++) {
        sort(order.begin(), order.end(), [&](int a, int b) {
          return dist[from][to][i][a] < dist[from][to][i][b]; 
        });
        for (int j = 0; j < min(deg[to], 3); j++) {
          good[from][to][i].push_back(order[j]);
          cnt_edges++;
        }
      }
    }
  }
  assert(cnt_edges <= n * m * 6);
  vector<long long> dp(n, inf);
  for (int i = 0; i < deg[seq[0]]; i++) {
    for (int j = 0; j < deg[seq[1]]; j++) {
      dp[j] = min(dp[j], dist[seq[0]][seq[1]][i][j]);
    }
  }
  vector<long long> new_dp(n);
  vector<long long> val(n);
  for (int p = 2; p < l; p++) {
    for (int i = 0; i < deg[seq[p]]; i++) {
      new_dp[i] = inf;
    }
    for (int i = 0; i < deg[seq[p - 1]]; i++) {
      val[i] = inf;
    }
    for (int i = 0; i < deg[seq[p - 1]]; i++) {
      for (int j = 0; j < deg[seq[p - 1]]; j++) {
        if (i != j) {
          val[i] = min(val[i], dp[j]);
        }
      }
    }
    for (int i = 0; i < deg[seq[p - 1]]; i++) {
      for (int j : good[seq[p - 1]][seq[p]][i]) {
        new_dp[j] = min(new_dp[j], val[i] + dist[seq[p - 1]][seq[p]][i][j]);
      }
    }
    for (int i = 0; i < deg[seq[p]]; i++) {
      dp[i] = new_dp[i];
    }
  }
  long long res = inf;
  for (int i = 0; i < deg[seq.back()]; i++) {
    res = min(res, dp[i]);
  }
  cout << (res == inf ? -1 : res) << '\n';
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 596 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 596 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Correct 0 ms 348 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 15 ms 3676 KB Output is correct
28 Correct 15 ms 3604 KB Output is correct
29 Correct 91 ms 9556 KB Output is correct
30 Correct 140 ms 9548 KB Output is correct
31 Correct 624 ms 9552 KB Output is correct
32 Correct 613 ms 9552 KB Output is correct
33 Correct 95 ms 13404 KB Output is correct
34 Correct 95 ms 13388 KB Output is correct
35 Correct 733 ms 13416 KB Output is correct
36 Correct 385 ms 13396 KB Output is correct
37 Correct 97 ms 13384 KB Output is correct
38 Correct 103 ms 17532 KB Output is correct
39 Correct 232 ms 17704 KB Output is correct
40 Correct 102 ms 17500 KB Output is correct
41 Correct 109 ms 17520 KB Output is correct
42 Correct 251 ms 20176 KB Output is correct
43 Correct 118 ms 22052 KB Output is correct
44 Correct 109 ms 22276 KB Output is correct
45 Correct 79 ms 27960 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 596 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Correct 0 ms 348 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 15 ms 3676 KB Output is correct
28 Correct 15 ms 3604 KB Output is correct
29 Correct 91 ms 9556 KB Output is correct
30 Correct 140 ms 9548 KB Output is correct
31 Correct 624 ms 9552 KB Output is correct
32 Correct 613 ms 9552 KB Output is correct
33 Correct 95 ms 13404 KB Output is correct
34 Correct 95 ms 13388 KB Output is correct
35 Correct 733 ms 13416 KB Output is correct
36 Correct 385 ms 13396 KB Output is correct
37 Correct 97 ms 13384 KB Output is correct
38 Correct 103 ms 17532 KB Output is correct
39 Correct 232 ms 17704 KB Output is correct
40 Correct 102 ms 17500 KB Output is correct
41 Correct 109 ms 17520 KB Output is correct
42 Correct 251 ms 20176 KB Output is correct
43 Correct 118 ms 22052 KB Output is correct
44 Correct 109 ms 22276 KB Output is correct
45 Correct 79 ms 27960 KB Output is correct
46 Correct 228 ms 29520 KB Output is correct
47 Correct 13164 ms 324072 KB Output is correct
48 Correct 13385 ms 463756 KB Output is correct
49 Correct 8505 ms 562544 KB Output is correct
50 Correct 10692 ms 562972 KB Output is correct
51 Correct 17032 ms 560908 KB Output is correct
52 Correct 4333 ms 560936 KB Output is correct
53 Correct 4331 ms 559372 KB Output is correct
54 Correct 4299 ms 561760 KB Output is correct
55 Correct 4434 ms 560376 KB Output is correct
56 Correct 4486 ms 613032 KB Output is correct
57 Correct 4425 ms 666932 KB Output is correct
58 Correct 4684 ms 725184 KB Output is correct
59 Correct 4640 ms 782480 KB Output is correct
60 Correct 4764 ms 845004 KB Output is correct
61 Correct 4803 ms 909100 KB Output is correct
62 Correct 5020 ms 978252 KB Output is correct
63 Runtime error 4463 ms 1048576 KB Execution killed with signal 9
64 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 596 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Correct 0 ms 348 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 15 ms 3676 KB Output is correct
28 Correct 15 ms 3604 KB Output is correct
29 Correct 91 ms 9556 KB Output is correct
30 Correct 140 ms 9548 KB Output is correct
31 Correct 624 ms 9552 KB Output is correct
32 Correct 613 ms 9552 KB Output is correct
33 Correct 95 ms 13404 KB Output is correct
34 Correct 95 ms 13388 KB Output is correct
35 Correct 733 ms 13416 KB Output is correct
36 Correct 385 ms 13396 KB Output is correct
37 Correct 97 ms 13384 KB Output is correct
38 Correct 103 ms 17532 KB Output is correct
39 Correct 232 ms 17704 KB Output is correct
40 Correct 102 ms 17500 KB Output is correct
41 Correct 109 ms 17520 KB Output is correct
42 Correct 251 ms 20176 KB Output is correct
43 Correct 118 ms 22052 KB Output is correct
44 Correct 109 ms 22276 KB Output is correct
45 Correct 79 ms 27960 KB Output is correct
46 Correct 228 ms 29520 KB Output is correct
47 Correct 13164 ms 324072 KB Output is correct
48 Correct 13385 ms 463756 KB Output is correct
49 Correct 8505 ms 562544 KB Output is correct
50 Correct 10692 ms 562972 KB Output is correct
51 Correct 17032 ms 560908 KB Output is correct
52 Correct 4333 ms 560936 KB Output is correct
53 Correct 4331 ms 559372 KB Output is correct
54 Correct 4299 ms 561760 KB Output is correct
55 Correct 4434 ms 560376 KB Output is correct
56 Correct 4486 ms 613032 KB Output is correct
57 Correct 4425 ms 666932 KB Output is correct
58 Correct 4684 ms 725184 KB Output is correct
59 Correct 4640 ms 782480 KB Output is correct
60 Correct 4764 ms 845004 KB Output is correct
61 Correct 4803 ms 909100 KB Output is correct
62 Correct 5020 ms 978252 KB Output is correct
63 Runtime error 4463 ms 1048576 KB Execution killed with signal 9
64 Halted 0 ms 0 KB -