so i was solving https://codeforces.me/contest/1138/problem/E. the idea here is quite obvious. compress all SCC as a single node and solve it like a normal DAG
then something strange happening. at the beginning i got a RTE verdict for my solution. when i was trying to find bugs in my code, i tried to reverse engineer and add this code my first DFS function (i used kosaraju's algorithm) :
if(n == 99998 && m == 99999 && d == 50) { if(u.fi > 100000 || u.se > 50) { cout << "KOSA : " << u.fi << " " << u.se << "\n"; fflush(stdout); } }
magically, adding this piece of code to my solution give me an AC verdict.
RTE solution : https://codeforces.me/contest/1138/submission/51269031
AC solution : https://codeforces.me/contest/1138/submission/51268839
so what really happened? is there any error in CF?
Auto comment: topic has been updated by ..vince (previous revision, new revision, compare).
Auto comment: topic has been updated by ..vince (previous revision, new revision, compare).
how u came to know you have to add this line
i don't, i just randomly add this line to find bugs.
The problem is cursed, simple as that.
what do you mean lol?
ok i get it now
No, it's a bug in your code which invokes undefined behaviour which makes your program spuriously fail or pass depending on unrelated stuff like presence of debug output or precise form of control flow. C++ does not guarantee runtime errors for signed overflow, array out-of-bounds or similar stuff (see "undefined behaviour").
I don't think the code has a bug the RTE is due to stack-overflow (https://codeforces.me/blog/entry/65812) but I have no idea why it adding that line it works.