제출 #51746

#제출 시각아이디문제언어결과실행 시간메모리
51746hugo_pmEvacuation plan (IZhO18_plan)C++14
54 / 100
4075 ms37200 KiB
#include <bits/stdc++.h> #pragma GCC diagnostic ignored "-Wunused-result" using namespace std; typedef pair<int, int> pii; typedef priority_queue<pii, vector<pii>, greater<pii>> MinHeap; const int INF = (INT_MAX - 3) / 2; const int borneMax = (int)(1e5) + 5; int nbNod, nbArc, nbCen, nbReq; vector<pii> adj[borneMax]; vector<int> cen; vector<int> valeur(borneMax, INF); bool exemple = false; void lireEntree() { scanf("%d%d", &nbNod, &nbArc); for (int ind = 0; ind < nbArc; ++ind) { int nod1, nod2, poids; scanf("%d%d%d", &nod1, &nod2, &poids); adj[nod1].push_back({nod2, poids}); adj[nod2].push_back({nod1, poids}); } scanf("%d", &nbCen); cen.resize(nbCen); for (int ind = 0; ind < nbCen; ++ind) { scanf("%d", &cen[ind]); } } void preparer() { MinHeap dij; for (int nod : cen) { dij.push({nod, 0}); valeur[nod] = 0; } while (! dij.empty()) { auto e = dij.top(); int nod = e.first, dis = e.second; dij.pop(); if (dis > valeur[nod]) continue; for (pii obj : adj[nod]) { int voisin = obj.first, poids = obj.second; if (dis + poids < valeur[voisin]) { valeur[voisin] = dis + poids; dij.push({voisin, dis + poids}); } } } } int solve(int nod1, int nod2) { for (auto obj : adj[nod1]) { if (obj.first == nod2) return min(valeur[nod1], valeur[nod2]); } priority_queue<pii> dij; vector<int> meilleur(borneMax, 0); dij.push({nod1, valeur[nod1]}); meilleur[nod1] = valeur[nod1]; while (! dij.empty()) { auto e = dij.top(); int nod = e.first, dis = e.second; dij.pop(); if (dis < meilleur[nod]) continue; for (pii obj : adj[nod]) { int voisin = obj.first; int nv = min(dis, valeur[voisin]); if (nv > meilleur[voisin]) { meilleur[voisin] = nv; dij.push({voisin, nv}); } } } return meilleur[nod2]; } int main() { lireEntree(); preparer(); scanf("%d", &nbReq); for (int ind = 0; ind < nbReq; ++ind) { int nod1, nod2; scanf("%d%d", &nod1, &nod2); printf("%d\n", solve(nod1, nod2)); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...