Recherche du plus long chemin dans un graphe à l'aide de STL et du tri topologique
C++
Hard
STL
Tâche «Recherche du plus long chemin dans un graphe à l'aide de STL et du tri topologique»
Un graphe orienté acyclique (DAG) avec N sommets et M arêtes est donné. Chaque arête a un poids entier (pouvant être négatif). Il faut trouver la longueur du plus long chemin depuis un sommet de départ donné S vers tous les autres sommets. Si un sommet est inaccessible, afficher « INF ». Utilisez le tri topologique (algorithme de Kahn) et la programmation dynamique. Contraintes : N ≤ 10^5, M ≤ 2*10^5, poids en valeur absolue ≤ 10^9. Il est garanti que le graphe ne contient pas de cycles.
Format d\ entrée
Première ligne : N M S (1 ≤ N ≤ 100000, 0 ≤ M ≤ 200000, 1 ≤ S ≤ N). Les M lignes suivantes : u v w (1 ≤ u, v ≤ N, -10^9 ≤ w ≤ 10^9).
Format de sortie
Affichez N lignes : pour chaque sommet i (de 1 à N), affichez la longueur du plus long chemin de S à i, ou « INF » si le sommet est inaccessible. La longueur du chemin de S à S est considérée comme égale à 0.
Exemples
Exemple 1
ENTRÉE
4 3 1
1 2 5
1 3 3
2 4 2
SORTIE
0
5
3
7
Exemple 2
ENTRÉE
3 2 1
1 2 -1
2 3 -2
SORTIE
0
-1
-3
main.cpp