結果

提出番号 531
提出者 neg4jaYR
言語 C++
提出日時 2017-07-22 00:29:51
問題名 (33)ゾンビ島 (Zombie Island)
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 4ms 22112KB
2 WA 0% 4ms 22112KB
3 WA 0% 5ms 22112KB
4 WA 0% 53ms 61392KB
5 AC 100% 12ms 24160KB

ソースコード

#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
typedef long long int ll;
using namespace std;
ll N, M, K, S;
ll P, Q;
vector<ll> G[100010];
vector<pair<ll, ll>> G2[100010];
bool F[100010] = {};
priority_queue <pair<ll, ll>>que, _que;
ll d[100010], d2[100010];
int main() {
	scanf("%lld%lld%lld%lld%lld%lld", &N, &M, &K, &S, &P, &Q);
	for (int i = 0; i <= N; i++) {
		d[i] = d2[i] = 1000000000000000000;
	}
	for (int i = 0; i < K; i++) {
		ll C;
		scanf("%lld", &C);
		G[0].push_back(C);
	}
	for (int i = 0; i < M; i++) {
		ll A, B;
		scanf("%lld%lld", &A, &B);
		G[A].push_back(B);
		G[B].push_back(A);
	}
	d[0] = 0;
	que.push(make_pair(-d[0], 0));
	while (!que.empty()) {
		ll c = -que.top().first, a = que.top().second;
		que.pop();
		if (c > S) que = _que;
		else {
			for (int i = 0, len = G[a].size(); i < len; i++) {
				if (d[G[a][i]] > c + 1) {
					d[G[a][i]] = c + 1;
					F[G[a][i]] = true;
					que.push(make_pair(-d[G[a][i]], G[a][i]));
				}
			}
		}
	}
	for (int i = 1; i <= N; i++) {
		for (int j = 0, len = G[i].size(); j < len; j++) {
			int k = G[i][j];
			if (k == N) {
				G2[i].push_back(make_pair(0, k));
			}
			else {
				G2[i].push_back(make_pair((F[k]) ? Q : P, k));
			}
		}
	}
	d2[1] = 0;
	que.push(make_pair(-d2[1], 1));
	while (!que.empty() && d2[N] == 1000000000000000000) {
		ll c = -que.top().first, a = que.top().second;
		que.pop();
		if (d2[a] > c) continue;
		for (int i = 0, len = G2[a].size(); i < len; i++) {
			int _a = G2[a][i].second, _b = G2[a][i].first + c;
			if (d2[_a] > _b) {
				d2[_a] = _b;
				que.push(make_pair(-d2[_a], _a));
			}
		}
	}
	printf("%lld\n", d2[N]);
}