As you are an engineering student (so am I), I can understand your idea of learning the above algorithm, but I think it is really unrealistic. I like math very much, too. I often learn all kinds of mathematics knowledge that is not my major, but in fact you should understand it after you finish it, not to mention that you need to use a very skilled level (not comparable to the general exam), so I think you must look at it selectively and strongly recommend it.
I think what you listed above is combinatorial mathematics is very difficult, but you must learn it well (this will use a lot of unexpected places), and graph theory is also necessary, but here I suggest you learn the "graph theory" in discrete mathematics first, and it is not too late to refer to special graph theory books when you meet more advanced theories in the future. In addition, I suggest you learn some basic knowledge of differential equations first, because in most cases, I think you just need to know how to build them, and this content doesn't need to be too deep, otherwise it will take too much time. As for some of the algorithms listed later, there is no way to avoid them, but that doesn't mean you have to look at them one by one. Of course, you can consider scanning them first, and then concentrate on the important algorithms with high relative probability in careful and in-depth study. I suggest that you practice more questions and learn the corresponding knowledge in the process of practicing questions, which is more efficient.
I can't help you with anything else. The key is to pay close attention to yourself and greatly improve efficiency. Finally, good luck!