UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#213349#2058. 小游戏KXG40654ms30920kbC++111.5kb2024-11-11 19:11:142024-11-11 23:01:45

answer

#include <cstdio>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <algorithm>
using namespace std;
struct node {
    int d, u, hp;
    node(int d = 0, int u = 0, int hp = 0) : d(d), u(u), hp(hp) {}
};
bool operator < (node a, node b) {
    return a.d > b.d;
}
vector<pair<int, int> > G[30010];
unordered_map<int, int> dis[30010];
queue<node> pq;
int n, m, k, x, y, z, a[30010], ans = 1e9;
void dijkstra() {
    pq.emplace(0, 1, k);
    dis[1][k] = 0;
    while (!pq.empty()) {
        node t = pq.front();
        pq.pop();
        // printf("%d %d %d\n", t.u, t.d, t.hp);
        int nowdis = dis[t.u][t.hp];
        if (t.u == n) {
            ans = min(ans, t.d);
        }
        t.hp = min(k, t.hp + a[t.u]);
        for (int i = 0; i < G[t.u].size(); i++) {
            int v = G[t.u][i].first;
            int w = G[t.u][i].second;
            if (t.hp >= w) {
                if (!dis[v].count(t.hp - w)) {
                    dis[v][t.hp - w] = nowdis + 1;
                    pq.emplace(nowdis + 1, v, t.hp - w);
                }
            }
        }
    }
}
int main() {
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    for (int i = 1; i <= m; i++) {
        scanf("%d%d%d", &x, &y, &z);
        G[x].push_back({y, z});
        G[y].push_back({x, z});
    }
    dijkstra();
    if (ans == 1e9) ans = -1;
    printf("%d\n", ans);
    return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 5ms
memory: 6012kb

input:

5 10 10
3 3 0 1 1
4 4 1
4 3 1
3 2 6
3 4 10
5 1 5
1 3 9
2 5 19
2 5 1
5 2 10
2 1 4

output:

1

result:

ok single line: '1'

Test #2:

score: 10
Accepted
time: 0ms
memory: 6012kb

input:

5 10 10
1 0 1 3 0
5 2 1
5 2 8
4 3 18
1 3 10
5 3 5
2 3 8
5 3 15
3 1 11
4 5 9
2 4 1

output:

-1

result:

ok single line: '-1'

Test #3:

score: 10
Accepted
time: 5ms
memory: 6016kb

input:

5 10 10
0 3 1 1 1
1 3 12
5 4 8
1 1 6
5 2 1
2 5 3
1 4 2
1 4 4
4 5 5
4 2 9
3 4 2

output:

2

result:

ok single line: '2'

Test #4:

score: 0
Wrong Answer
time: 5ms
memory: 6036kb

input:

20 50 20
4 0 3 4 3 0 5 2 5 0 5 2 5 2 0 6 2 3 4 2
16 5 18
9 1 24
14 16 27
5 16 32
14 7 31
13 20 23
6 ...

output:

8

result:

wrong answer 1st lines differ - expected: '10', found: '8'

Test #5:

score: 0
Wrong Answer
time: 4ms
memory: 6116kb

input:

100 500 20
2 5 5 3 0 1 1 3 4 2 5 5 5 4 5 3 1 0 2 5 5 5 2 2 1 4 0 1 6 0 1 5 2 4 5 4 4 6 3 0 0 1 5 1 3...

output:

9

result:

wrong answer 1st lines differ - expected: '11', found: '9'

Test #6:

score: 10
Accepted
time: 131ms
memory: 13620kb

input:

500 1000 500
143 113 118 133 51 100 155 76 81 43 8 91 85 65 61 69 1 30 135 125 0 43 126 20 40 52 165...

output:

11

result:

ok single line: '11'

Test #7:

score: 0
Wrong Answer
time: 504ms
memory: 30920kb

input:

1000 5000 1000
94 154 195 48 124 134 103 168 192 122 101 8 5 197 62 123 36 129 90 48 24 43 104 7 108...

output:

30

result:

wrong answer 1st lines differ - expected: '32', found: '30'

Test #8:

score: 0
Time Limit Exceeded

input:

10000 50000 10000
30 96 44 6 84 58 47 34 35 80 49 45 47 76 93 16 2 83 23 79 81 12 66 81 96 3 37 4 69...

output:


result:


Test #9:

score: 0
Time Limit Exceeded

input:

30000 100000 20000
21 95 28 93 22 5 16 70 27 36 38 21 7 11 8 46 88 19 98 80 70 53 73 83 79 93 55 75 ...

output:


result:


Test #10:

score: 0
Time Limit Exceeded

input:

30000 100000 20000
94 72 1 42 14 15 63 14 26 25 44 9 1 71 75 85 98 80 87 49 10 47 73 16 98 13 62 72 ...

output:


result: