UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#213454#2058. 小游戏one_zero_four_zero70394ms84252kbC++111.5kb2024-11-11 23:11:532024-11-11 23:11:59

answer

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;

struct edge{
	int v, w;
};

int N, M, MAXN, ans = 0x3f3f3f3f;
int dis[2000006];
bool vis[2000006];
vector<edge> tmp[100005];
vector<int> E[2000006];
int val[100005];
int u[200005], v[200005], w[200005];

void dijkstra(int st){
	memset(dis, 0x3f, sizeof(dis));
	memset(vis, 0, sizeof(vis));
	dis[st] = 0;
	priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
	q.push({0, st});
	while (!q.empty()){
		int u = q.top().second;
		q.pop();
		if (vis[u]) continue;
		// cout << u << " " << dis[u] << ";;\n";
		vis[u] = 1;
		for (auto && v : E[u]){
			if (dis[v] <= dis[u] + 1) continue;
			dis[v] = dis[u] + 1;
			q.push({dis[v], v});
		}
	}
}

int main(){
#ifndef ONLINE_JUDGE
	freopen("../data.in", "r", stdin);
	freopen("../data.out", "w", stdout);
#endif

	scanf("%d %d %d", &N, &M, &MAXN);
	for (int i = 1; i <= N; i ++){
		scanf("%d", &val[i]);
	}
	for (int i = 1; i <= M; i ++){
		scanf("%d %d %d", &u[i], &v[i], &w[i]);
		tmp[u[i]].push_back({v[i], w[i]});
		tmp[v[i]].push_back({u[i], w[i]});
	}
	for (int k = 1; k <= MAXN; k ++){
		for (int i = 1; i <= N; i ++){
			for (auto && v : tmp[i]){
				if (k - v.w <= 0) continue;
				E[k * N + i].push_back(min(MAXN, k - v.w + val[v.v]) * N + v.v);
			}
		}
	}
	dijkstra(MAXN * N + 1);
	for (int k = 1; k <= MAXN; k ++){
		ans = min(ans, dis[k * N + N]);
	}
	if (ans == 0x3f3f3f3f) ans = -1;
	printf("%d\n", ans);
	
	return 0;
}

Details

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

Test #1:

score: 10
Accepted
time: 7ms
memory: 60244kb

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: 3ms
memory: 60244kb

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: 12ms
memory: 60248kb

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: 8ms
memory: 60252kb

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: 4ms
memory: 60328kb

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: 77ms
memory: 67100kb

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: 283ms
memory: 84252kb

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: 0
Runtime Error

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
Runtime Error

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
Runtime Error

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: