Submission #399264

#TimeUsernameProblemLanguageResultExecution timeMemory
399264fvogel499악어의 지하 도시 (IOI11_crocodile)C++14
0 / 100
1 ms332 KiB
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; #define pii pair<int, int> #define MAX_N 50000 #define MAX_M 10000000 #define inf 1e18 #define ll long long ll dist [MAX_N]; ll secondDist [MAX_N]; bool proc [MAX_N]; struct Compare { bool operator()(int a, int b) { return (secondDist[a] > secondDist[b]); } }; int travel_plan(int nbNodes, int nbEdges, int corridors [MAX_M][2], int travelTime [MAX_M], int nbExits, int exits [MAX_N]) { vector<vector<pii>> graph(nbNodes); for (int i = 0; i < nbEdges; i++) { graph[corridors[i][0]].push_back(pii(corridors[i][1], travelTime[i])); graph[corridors[i][1]].push_back(pii(corridors[i][0], travelTime[i])); } for (int i = 0; i < nbNodes; i++) { dist[i] = inf; secondDist[i] = inf; proc[i] = false; } priority_queue<int, vector<int>, Compare> q; for (int i = 0; i < nbExits; i++) { q.push(exits[i]); dist[exits[i]] = 0; secondDist[exits[i]] = 0; } while (!q.empty()) { int curNode = q.top(); q.pop(); if (proc[curNode]) continue; proc[curNode] = true; for (pii newEdge : graph[curNode]) { int newNode = newEdge.first; ll newWeight = newEdge.second; ll newDist = secondDist[curNode]+newWeight; if (proc[newNode] or newDist > secondDist[newNode]) continue; if (newDist <= dist[newNode]) { secondDist[newNode] = dist[newNode]; dist[newNode] = newDist; } else if (newDist <= secondDist[newNode]) { secondDist[newNode] = newDist; } else { cerr << "ISSUE-1"; } q.push(newNode); } } ll maxDist = 0; for (int i = 0; i < nbNodes; i++) { maxDist = max(maxDist, secondDist[i]); } return maxDist; } // int32_t main() { // int nbNodes, nbEdges; // cin >> nbNodes >> nbEdges; // simul // vector<vector<int>> corridors(nbEdges, vector<int>(2)); // for (int i = 0; i < nbEdges; i++) cin >> corridors[i][0] >> corridors[i][1]; // simul // vector<int> travelTime(nbEdges); // for (int i = 0; i < nbEdges; i++) cin >> travelTime[i]; // simul // int nbExits; // cin >> nbExits; // vector<int> exits(nbExits); // for (int i = 0; i < nbExits; i++) cin >> exits[i]; // cout << travel_plan(nbNodes, nbEdges, corridors, travelTime, nbExits, exits); // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...