235032026-01-23 21:44:56matemakaiTom és Jerry 1 (80)cpp17Accepted 80/80112ms4168 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	const int MAX_DIST = 1e6;

	int n, m, t, p, e;
	cin >> n >> m >> t >> p >> e;
	--t;
	--e;
	vector<vector<pair<int, int>>> adj(n);
	for (int i = 0; i < m; ++i) {
		int a, b, c;
		cin >> a >> b >> c;
		--a;
		--b;
		--c;
		adj[a].push_back({b, c});
		adj[b].push_back({a, c});
	}

	vector<int> tdist(n, MAX_DIST);

	queue<int> q;
	q.push(t);
	tdist[t] = 0;

	while (!q.empty()) {
		int node = q.front();
		q.pop();

		for (auto [next, w] : adj[node]) {
			if (w && tdist[next] == MAX_DIST) {
				tdist[next] = tdist[node] + 1;
				q.push(next);
			}
		}
	}

	vector<int> jtime(n, 0);
	jtime[e] = tdist[e];
	q.push(e);

	while (!q.empty()) {
		int node = q.front();
		q.pop();

		for (auto [next, w] : adj[node]) {
			int new_jtime = min(jtime[node] - 1, tdist[next]);
			if (new_jtime > jtime[next]) {
				jtime[next] = new_jtime;
				q.push(next);
			}
		}
	}

	for (int i = 0; i < p; ++i) {
		int a;
		cin >> a;
		--a;
		if (jtime[a] > 0) {
			cout << "IGEN\n";
		} else {
			cout << "NEM\n";
		}
	}
}
SubtaskSumTestVerdictTimeMemory
base80/80
1Accepted0/01ms500 KiB
2Accepted0/03ms508 KiB
3Accepted4/41ms316 KiB
4Accepted4/41ms316 KiB
5Accepted4/41ms316 KiB
6Accepted4/41ms508 KiB
7Accepted4/41ms316 KiB
8Accepted4/42ms316 KiB
9Accepted4/43ms508 KiB
10Accepted4/43ms316 KiB
11Accepted4/49ms564 KiB
12Accepted4/412ms1072 KiB
13Accepted4/420ms1256 KiB
14Accepted4/445ms2216 KiB
15Accepted4/464ms2752 KiB
16Accepted4/463ms3868 KiB
17Accepted4/496ms3972 KiB
18Accepted4/463ms3076 KiB
19Accepted4/478ms3448 KiB
20Accepted4/475ms3380 KiB
21Accepted4/468ms2868 KiB
22Accepted4/4112ms4168 KiB