풀이 어려웠던 요인
vector<int> pathsToMe 형태로 만들어주어야 했다.edges[s].push_back({ d, dist, true }); 형태로 초기화하면 이후 invalid하게 만들기 위해 true를 false로 변경이 필요할 때에 임의 edges에서 반복문 탐색하며 찾아야 하는 문제가 있었다. → 입력을 그대로 갖는 edges 배열을 쓰고, 여기에 bool isValid 멤버 변수도 두고, 기존의 edges는 vector<int>edgeIndices[s] 로 변경한다. 그러면 임의의 start node가 edge index를 참조하고 있어서 기존의 pathsToMe도 vector<int> edgeIndicesToMe 로 갱신해서 다익스트라 탐색은 동일하게, 최단 경로 edge 제거 연산도 $O(M)$으로 빠르게 가능했다.다익스트라를 N번 해서 답을 구했으나, 더욱 최적해는 플로이드-워셜 알고리즘을 사용한다.
플로이드 워셜 알고리즘을 통한 더 최적화된 풀이는 여기로