UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#213659#2058. 小游戏ThySecret80986ms99156kbC++112.0kb2024-11-13 08:49:472024-11-13 08:49:48

answer

// #pragma GCC optimize("-std=c++14")

#include <bits/stdc++.h>

using namespace std;

// #define int long long
// #define x first
// #define y second
#define File(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)

inline void debug() { cerr << '\n'; }
template<typename Type, typename... Other>
inline void debug(const Type& x, const Other&... y) { cerr << x << ' '; debug(y...); }
#define DEBUG(a...) cerr << "[" << #a << "] = ", debug(a);

typedef long long LL;
typedef pair<int, int> PII;

const int N = 200010;
const int INF = 0x3f3f3f3f;

template<typename Type>
inline void read(Type &res)
{
    res = 0;
    int ch = getchar(), flag = 0;
    while (!isdigit(ch)) flag |= ch == '-', ch = getchar();
    while (isdigit(ch)) res = (res << 3) + (res << 1) + (ch ^ 48), ch = getchar();
    res = flag ? -res : res;
}
template<typename Type, typename... Other>
inline void read(Type &res, Other&... y) { read(res), read(y...); }

int n, m, k, val[N];
int h[N], e[N << 1], ne[N << 1], w[N << 1], idx;
int rest[N], hh = 0, tt = -1;
array<int, 3> que[40 * N];

inline void add(int a, int b, int c) { e[++ idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx; }

signed main()
{
    memset(h, -1, sizeof h), idx = -1;
    read(n, m, k);
    for (int ver = 1; ver <= n; ver ++) read(val[ver]);
    while (m --)
    {
        int a, b, c; read(a, b, c);
        add(a, b, c), add(b, a, c);
    }

    que[++ tt] = {1, k, 0};
    while (hh <= tt)
    {
        array<int, 3> cur = que[hh ++];
        // int ver = que[hh][0], hp = que[hh][1], dist = que[hh ++][2];
        int ver = cur[0], hp = cur[1], dist = cur[2];
        if (ver == n) return cout << dist << '\n', 0;
        for (int i = h[ver]; ~i; i = ne[i])
        {
            int to = e[i];
            if (hp <= w[i]) continue;
            int minn = min(k, hp - w[i] + val[to]);
            if (rest[to] >= minn) continue;
            que[++ tt] = {to, minn, dist + 1};
            rest[to] = minn;
        }
    }
    puts("-1");
    return 0;
}

详细

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

Test #1:

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

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: 1928kb

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: 0ms
memory: 1968kb

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: 10
Accepted
time: 0ms
memory: 1968kb

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:

10

result:

ok single line: '10'

Test #5:

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

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:

11

result:

ok single line: '11'

Test #6:

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

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: 10
Accepted
time: 2ms
memory: 2212kb

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:

32

result:

ok single line: '32'

Test #8:

score: 10
Accepted
time: 85ms
memory: 8208kb

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:

39

result:

ok single line: '39'

Test #9:

score: 0
Wrong Answer
time: 899ms
memory: 99156kb

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:

-1

result:

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

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: