UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#185211#2058. 小游戏hsfzbzjr1001580ms4144kbC++111.2kb2023-09-24 21:15:342023-09-24 21:15:36

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e4+10;
const int M=1e5+10;
int n,m,mxHP;
int hp[N];

struct edge{
	int to,nxt,w;
}e[M<<1];

int hd[N],nE=0;

void addedge(int u,int v,int w){
	e[++nE]=(edge){v,hd[u],w};
	hd[u]=nE;
}

int lstHP[N],nowHP[N];
bool in[N];
struct node{
	int u,d;
};
queue<node> q;
void SPFA(){
	lstHP[1]=nowHP[1]=mxHP;in[1]=1;
	q.push((node){1,0});
	int lstD=0;
	
	while(!q.empty()){
		int u=q.front().u,d=q.front().d;q.pop();in[u]=0;
		if(u==n){
			printf("%d\n",d);
			return;
		}
		if(d!=lstD){
			memset(in,0,sizeof(in));
			for(int i=1;i<=n;i++)nowHP[i]=lstHP[i];
		}
		for(int i=hd[u];i;i=e[i].nxt){
			int v=e[i].to;
			int w=e[i].w;
			int t=min(mxHP,nowHP[u]-w+hp[v]);
			if(nowHP[u]>w&&lstHP[v]<t){
				lstHP[v]=t;
				if(!in[v]){
					in[v]=1;
					q.push((node){v,d+1});
				}
			}
		}
		lstD=d;
	}
	
	printf("-1\n");
}

int main(){
	
	scanf("%d %d %d",&n,&m,&mxHP);
	
	for(int i=1;i<=n;i++)scanf("%d",&hp[i]);
	
	for(int i=1;i<=m;i++){
		int u,v,w;
		scanf("%d %d %d",&u,&v,&w);
		addedge(u,v,w);
		addedge(v,u,w);
	}	
	
	SPFA();
	
	return 0;
}

详细

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

Test #1:

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

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

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

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

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

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

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

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: 52ms
memory: 2672kb

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: 10
Accepted
time: 731ms
memory: 4140kb

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:

1726

result:

ok single line: '1726'

Test #10:

score: 10
Accepted
time: 797ms
memory: 4144kb

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:

1594

result:

ok single line: '1594'