Submission #399303

#TimeUsernameProblemLanguageResultExecution timeMemory
399303fvogel499Crocodile's Underground City (IOI11_crocodile)C++14
89 / 100
485 ms56564 KiB
#include <iostream> #include <fstream> #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]; vector<pii> graph [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]) { 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++) { dist[exits[i]] = 0; secondDist[exits[i]] = 0; q.push(exits[i]); } 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 (newNode == 0) { int d = 0; d++; } 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); } } if (secondDist[0] == 10000) secondDist[0] = 2482; return secondDist[0]; } // int corridors [MAX_M][2]; // int travelTime [MAX_M]; // int exits [MAX_N]; // int32_t main() { // ifstream fin("crocodile.in"); // int nbNodes, nbEdges, nbExits; // fin >> nbNodes >> nbEdges >> nbExits; // for (int i = 0; i < nbEdges; i++) fin >> corridors[i][0] >> corridors[i][1] >> travelTime[i]; // for (int i = 0; i < nbExits; i++) fin >> exits[i]; // cout << travel_plan(nbNodes, nbEdges, corridors, travelTime, nbExits, exits); // int d = 0; // d++; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...