Co do C, bez wątpienia pomoże Ci myśleć "bliżej maszyny". Dane z rynku jednak pokazują że kod w C jest około 2 x większy do rozwiązania tego samego zadania przy takiej samej (lub o kilka % mniejszej dla C++) objętości kodu wynikowego. No ale bez wątpienia uczy dyscypliny i doceniania tego co dostarcza C++.
A co do algorytmów.... jak chcesz zacząć z "grubej rury", nie ma sprawy... https://ksiegarnia.pwn.pl/Wprowadzenie-do-algorytmow,68706413,p.html (link pierwszy z brzegu, nie traktuj jak sugestię oferty). Ale na Twoim miejscu, zaczął bym od tej książki: https://helion.pl/ksiazki/c-biblioteka-standardowa-podrecznik-programisty-wydanie-ii-nicolai-m-josuttis,cpbsp2.htm#format/e Nie jest o algorytmach a o bibliotece standardowej ale pozwala się zapoznać co można z nią zrobić.
A później albo sam znajdziesz albo zapytasz.. o algorytmy grafowe czy .... inne...
Pamiętaj o jednym SPOJ w żadnym razie nie uczy dobrej architektury rozwiązania i pisania czystego kodu. Stąd jak rozwiążesz problem, pytaj o recenzję (najlepiej via prv.) jakości kodu. Wtedy dostaniesz informację zwrotną której serwis Ci nie udzieli. Oprócz znajomości algorytmów, liczy się także jakość pozostawianego kodu. Bywa że nawet bardziej niż sam algorytm...
Do zaznajomienia się z algorytmami, może być także i python. Tu jednak wydajność bywa traktowana po macoszemu ze względu na architekturę samego języka. Podtrzymuję jednak zdanie co do jakości kodu i SPOJ'a. Po rozwiązaniu problemu, szukaj recenzent(a/ki).