Java není o moc pomalejší než C/C++. Musíte ale kód patřičně optimalizovat. Nejdřív si program napište tak jak umíte, otestujte v upload systemu že dává správné řešení na menších datech. Pak se vrhněte na optimalizaci:
-
pro výstup použijte jenom jeden System.out.println()
pro spojování stringů používejte StringBuilder a nikoli „prvni“+„druhy“
pozor na funkce pro práci se stringy jako startsWith, replace, trim - většinou jdou nahradit subStringem nebo porovnáváním charů, je to rychlejší
pro rozdělení řetězce a parsování používejte StringTokenizer
optimalizujte celý kód, nikoli jenom vlastní algoritmus. Mě nejvíc času zabrala tvorba grafu parsováním vstupu.
přidejte slovo final k public metodám, které nepřetěžujete
ArrayList bývá rychlejší než LinkedList
HashMap se velmi hodí na uskladnění např. uzlů grafu, má rychlé vyhledávání
nevytvářejte zbytečné lokální proměnné, kratší kód bývá rychlejší
HashSet je dobré používat jen pokud chcete kontrolovat, zda v poli už je nějaký String. Jindy je lepší použít ArrayList (aspoň tedy podle mého zjištění, ale je možné, že to je jinak, tak to kdyžtak smažte.)