Submission #1268446

#TimeUsernameProblemLanguageResultExecution timeMemory
1268446krzyskaCrocodile's Underground City (IOI11_crocodile)C++20
100 / 100
371 ms73332 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; int travel_plan(int n, int m, int kr[][2], int dl[], int k, int wyjscia[]){ //cout << "lets do this" << endl; //cout << n << ' ' << m << ' ' << k << endl; vector<pair<int, long long>> graf[n + 1]; for(int i = 0; i < m; i++){ graf[kr[i][0]].push_back({kr[i][1], dl[i]}); graf[kr[i][1]].push_back({kr[i][0], dl[i]}); } priority_queue<pair<long long, int>> Q; int sumy[n]; bool odw[n]; long long wyn[n]; long long minn[n]; for(int i = 0; i < n; i++){ sumy[i] = 0; wyn[i] = LLONG_MAX; odw[i] = 0; } for(int i = 0; i < k; i++){ Q.push({0, wyjscia[i]}); sumy[wyjscia[i]] = 2; wyn[wyjscia[i]] = 0; } //cout << "cos nie pyklo" << endl; while(!(Q.empty())){ int v = Q.top().second; long long odl = -Q.top().first; Q.pop(); if(odw[v]){continue;} odw[v] = 1; // cout << "Jestem w " << v << " z wynikiem " << wyn[v] << endl; for(auto i:graf[v]){ if(odw[i.first]){continue;} if(!sumy[i.first]){ minn[i.first] = wyn[v] + i.second; } else{ if(wyn[v] + i.second <= minn[i.first]){ wyn[i.first] = minn[i.first]; minn[i.first] = wyn[v] + i.second; Q.push({-wyn[i.first], i.first}); } else if(wyn[v] + i.second < wyn[i.first]){ wyn[i.first] = wyn[v] + i.second; Q.push({-wyn[i.first], i.first}); } } sumy[i.first]++; } } return wyn[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...