Submission details
Task:Investing
Sender:Aalto CS-A1140 Team 2
Submission time:2025-11-08 12:46:50 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.01 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails
#15ACCEPTED0.01 sdetails
#16ACCEPTED0.01 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.01 sdetails
#19ACCEPTED0.01 sdetails
#20ACCEPTED0.01 sdetails
#21ACCEPTED0.01 sdetails
#22ACCEPTED0.02 sdetails
#23ACCEPTED0.01 sdetails
#24ACCEPTED0.01 sdetails
#25ACCEPTED0.01 sdetails
#26ACCEPTED0.03 sdetails
#27ACCEPTED0.02 sdetails
#28ACCEPTED0.01 sdetails
#29ACCEPTED0.03 sdetails
#30ACCEPTED0.01 sdetails
#31ACCEPTED0.03 sdetails
#32ACCEPTED0.01 sdetails
#33ACCEPTED0.04 sdetails
#34ACCEPTED0.01 sdetails
#35ACCEPTED0.01 sdetails
#36ACCEPTED0.01 sdetails
#37ACCEPTED0.01 sdetails
#38ACCEPTED0.01 sdetails

Code

#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()

const int N = 1e5 + 1;

vector<pair<int, int>> g[N];
vector<int> rg[N];
int rb[N];

void bdfs(int s) {
	if (rb[s]) return;
	rb[s] = 1;
	for (int u : rg[s]) {
		bdfs(u);
	}
}

using ll = long long;
const ll inf = LLONG_MAX;
struct Ed { int a, b, w, s() { return a < b ? a : -a; }};
struct Node { ll dist = inf; int prev = -1; };

void bellmanFord(vector<Node>& nodes, vector<Ed>& eds, int s) {
	nodes[s].dist = 0;
	sort(all(eds), [](Ed a, Ed b) { return a.s() < b.s(); });

	int lim = sz(nodes) / 2 + 2;
	rep(i, 0, lim) for (Ed ed : eds) {
		Node cur = nodes[ed.a], &dest = nodes[ed.b];
		if (abs(cur.dist) == inf) continue;
		ll d = cur.dist + ed.w;
		if (d < dest.dist) {
			dest.prev = ed.a;
			dest.dist = (i < lim - 1 ?  d : -inf);
		}
	}
	rep(i, 0, lim) for (Ed e : eds) {
		if (nodes[e.a].dist == -inf)
			nodes[e.b].dist = -inf;
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, m, a, b;
	cin >> n >> m >> a >> b;

	a--;
	b--;

	for (int i = 0; i < m; ++i) {
		int u, v;
		cin >> u >> v;
		u--;
		v--;
		int c;
		cin >> c;
		g[u].push_back({v, c});
		rg[v].push_back(u);
	}

	bdfs(b);

	if (!rb[a]) {
		cout << "IMPOSSIBLE" << endl;
		return 0;
	}

	vector<Ed> edges;
	for (int i = 0; i < n; ++i) {
		if (!rb[i]) continue;
		for (auto [j, w] : g[i]) {
			if (!rb[j]) continue;
			edges.push_back({i, j, -w});
		}
	}

	vector<Node> nodes(n);

	bellmanFord(nodes,edges, a);

	if (nodes[b].dist == -inf) {
		cout << "INFINITE MONEY GLITCH" << endl;
	} else {
		cout << -nodes[b].dist << endl;
	}
}

Test details

Test 1

Verdict: ACCEPTED

input
3 3 1 2
3 2 200
1 2 -100
1 3 -100

correct output
100

user output
100

Test 2

Verdict: ACCEPTED

input
5 5 4 3
5 2 -62
5 4 -93
3 1 -223
2 1 132
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Verdict: ACCEPTED

input
5 5 5 3
5 1 72
1 2 269
4 3 -285
4 1 -48
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 4

Verdict: ACCEPTED

input
5 5 3 4
3 4 -176
4 1 -289
5 1 -228
2 5 125
...

correct output
-176

user output
-176

Test 5

Verdict: ACCEPTED

input
5 10 5 4
4 2 -181
1 4 157
1 3 111
1 5 7
...

correct output
-98

user output
-98

Test 6

Verdict: ACCEPTED

input
5 10 2 5
4 5 -245
4 5 138
4 5 215
3 2 -165
...

correct output
357

user output
357

Test 7

Verdict: ACCEPTED

input
5 10 1 5
3 4 136
3 1 -130
2 4 -280
5 4 -249
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 8

Verdict: ACCEPTED

input
5 10 4 1
3 1 -2
5 1 215
4 2 166
4 1 -279
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 9

Verdict: ACCEPTED

input
5 10 5 1
1 5 -224
1 4 -220
4 2 -1
4 5 -214
...

correct output
-79

user output
-79

Test 10

Verdict: ACCEPTED

input
5 10 2 1
1 4 -299
1 2 -39
4 5 81
4 1 -56
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 11

Verdict: ACCEPTED

input
5 10 4 4
5 3 -174
5 2 -46
5 1 -210
2 1 -80
...

correct output
0

user output
0

Test 12

Verdict: ACCEPTED

input
5 10 4 2
4 5 -218
4 2 -30
4 1 -218
2 4 -64
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 13

Verdict: ACCEPTED

input
10 30 9 7
3 8 39
4 8 -39
4 6 -38
10 7 -178
...

correct output
-93

user output
-93

Test 14

Verdict: ACCEPTED

input
10 30 3 10
3 6 -1
3 8 -300
3 9 -143
7 2 -5
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 15

Verdict: ACCEPTED

input
10 30 7 8
8 4 -53
5 3 -87
5 1 -266
5 2 -277
...

correct output
-61

user output
-61

Test 16

Verdict: ACCEPTED

input
10 30 8 9
2 9 -37
5 3 -259
5 2 -222
7 1 -184
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 17

Verdict: ACCEPTED

input
4 5 3 1
4 2 -107
4 1 -300
2 4 108
3 1 300
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 18

Verdict: ACCEPTED

input
4 4 3 2
1 4 -177
4 1 178
3 2 300
3 4 -300

correct output
300

user output
300

Test 19

Verdict: ACCEPTED

input
100 1000 95 59
17 33 -154
17 32 68
17 65 71
17 9 -284
...

correct output
-13

user output
-13

Test 20

Verdict: ACCEPTED

input
100 10000 95 70
49 84 -186
49 65 120
49 76 -38
49 66 27
...

correct output
11333

user output
11333

Test 21

Verdict: ACCEPTED

input
1000 1000 942 532
211 103 0
65 459 266
132 809 -167
538 228 -206
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 22

Verdict: ACCEPTED

input
1000 10000 356 204
831 540 180
77 237 -170
77 284 -62
77 431 -233
...

correct output
2015

user output
2015

Test 23

Verdict: ACCEPTED

input
100 1000 43 74
7 83 101
7 71 -207
7 14 76
83 71 235
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 24

Verdict: ACCEPTED

input
100 10000 65 38
49 17 114
49 15 -56
49 50 -139
49 77 205
...

correct output
4259

user output
4259

Test 25

Verdict: ACCEPTED

input
1000 1000 130 119
306 321 288
250 624 58
724 994 193
924 126 271
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 26

Verdict: ACCEPTED

input
1000 10000 520 842
992 359 30
992 751 -79
992 473 86
992 132 184
...

correct output
5168

user output
5168

Test 27

Verdict: ACCEPTED

input
1000 10000 954 5
95 364 229
95 386 -23
95 516 40
95 385 188
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 28

Verdict: ACCEPTED

input
100 1000 10 44
87 45 -54
87 5 -174
87 43 -45
87 54 -72
...

correct output
-115

user output
-115

Test 29

Verdict: ACCEPTED

input
1000 10000 216 836
503 408 -244
438 4 -245
438 351 -210
438 797 -80
...

correct output
-251

user output
-251

Test 30

Verdict: ACCEPTED

input
100 1000 35 52
81 36 -69
81 19 -271
81 87 -78
86 9 -119
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 31

Verdict: ACCEPTED

input
1000 10000 237 361
274 53 -54
274 678 -68
723 853 -191
723 858 -86
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 32

Verdict: ACCEPTED

input
100 1000 54 13
35 66 -59
35 92 -229
35 28 -211
35 58 -232
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 33

Verdict: ACCEPTED

input
1000 10000 230 928
94 30 -61
94 594 -43
94 338 -123
827 422 -146
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 34

Verdict: ACCEPTED

input
1000 1001 917 438
494 421 -150
494 917 -300
421 494 151
998 438 300
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 35

Verdict: ACCEPTED

input
1000 1001 183 711
197 383 -109
197 711 -300
383 197 110
570 711 300
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 36

Verdict: ACCEPTED

input
1000 1001 43 622
622 786 -300
983 786 -73
983 43 -300
786 983 74
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 37

Verdict: ACCEPTED

input
1000 1001 116 939
320 700 -51
320 734 -300
700 320 52
425 939 300
...

correct output
INFINITE MONEY GLITCH

user output
INFINITE MONEY GLITCH

Test 38

Verdict: ACCEPTED

input
1000 1000 7 836
973 309 79
309 973 -78
56 836 300
489 56 300
...

correct output
299100

user output
299100