답안 #917742

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
917742 2024-01-28T17:08:01 Z 406 Robot (JOI21_ho_t4) C++17
24 / 100
145 ms 51520 KB
#include <bits/stdc++.h>
#define int int64_t
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)

using namespace std;
using ar = array<int, 2>;
using ar3 = array<int, 3>;

const int64_t INF = 1ll << 60;
const int N = 2e5 + 5;

vector<ar3> adj[N];
int n, m, C[N], d[N], cnt[N], sum[N];
ar last[N];

signed main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr); 
        cin >> n >> m;
        FOR(i, 0, m) {
                int u, v, c, p;
                cin >> u >> v >> c >> p;
                --u, --v;
                adj[v].push_back({u, c, p});
                adj[u].push_back({v, c, p});
        }
        fill(last, last + N, ar{-1, -1});

        vector<array<int, 4>> E;
        FOR(i, 0, n) {
                for (auto [u, c, p]: adj[i]) cnt[c]++, sum[c] += p;
                for (auto &[u, c, p]: adj[i]) {
                        p = min(p, sum[c] - p);
                        if (cnt[c] == 2) {
                                if (last[c][0] == -1) last[c] = {u, p};
                                else {
                                        E.push_back({last[c][0], u, c, last[c][1]});
                                        E.push_back({u, last[c][0], c, p});
                                }
                        }
                }
                for (auto [u, c, p]: adj[i]) cnt[c] = sum[c] = 0, last[c][0] = -1;
        }
        for (auto [u, v, c, p]: E)
                adj[u].push_back({v, c, p});

        fill(d + 1, d + N, INF);
        queue<int> q;
        q.push(0);
        while (q.size()) {
                int v = q.front();
                q.pop();
                for (auto [u, c, p]: adj[v]) {
                        int w = d[v] + p;
                        if (w < d[u]) {
                                q.push(u);
                                d[u] = w;
                        }
                }
        }
        cout << (d[n - 1] < INF ? d[n - 1] : -1) << '\n';
        return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 14352 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 4 ms 14428 KB Output is correct
4 Correct 4 ms 14428 KB Output is correct
5 Correct 4 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 4 ms 14440 KB Output is correct
8 Correct 3 ms 14428 KB Output is correct
9 Correct 5 ms 14684 KB Output is correct
10 Correct 4 ms 14940 KB Output is correct
11 Correct 4 ms 14684 KB Output is correct
12 Incorrect 4 ms 14684 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 24528 KB Output is correct
2 Correct 19 ms 19400 KB Output is correct
3 Correct 50 ms 26708 KB Output is correct
4 Correct 27 ms 21196 KB Output is correct
5 Correct 145 ms 50620 KB Output is correct
6 Correct 122 ms 51520 KB Output is correct
7 Correct 95 ms 45544 KB Output is correct
8 Correct 119 ms 33480 KB Output is correct
9 Correct 103 ms 33476 KB Output is correct
10 Correct 69 ms 32004 KB Output is correct
11 Correct 46 ms 25652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 14352 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 4 ms 14428 KB Output is correct
4 Correct 4 ms 14428 KB Output is correct
5 Correct 4 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 4 ms 14440 KB Output is correct
8 Correct 3 ms 14428 KB Output is correct
9 Correct 5 ms 14684 KB Output is correct
10 Correct 4 ms 14940 KB Output is correct
11 Correct 4 ms 14684 KB Output is correct
12 Incorrect 4 ms 14684 KB Output isn't correct
13 Halted 0 ms 0 KB -