제출 #1003219

#제출 시각아이디문제언어결과실행 시간메모리
1003219LilPluton악어의 지하 도시 (IOI11_crocodile)C++14
100 / 100
283 ms63404 KiB
#include "crocodile.h" #include <bits/stdc++.h> #define OPT ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define intt long long #define ll long long #define pb push_back #define ff first #define arr array #define vll vector<int> #define rep(i,j,k) for(int i = j; i <= k; ++i) #define all(a) a.begin(),a.end() #define pii pair<int,int> #define endll '\n' using namespace std; const int INF = 1e9; const int N = 1e5 + 5; int travel_plan(int n, int m, int r[][2], int L[], int k, int p[]) { vector<vector<arr<int,2>>>g(N); for(int i = 0; i < m; i ++){ g[r[i][0]].push_back({r[i][1], L[i]}); g[r[i][1]].push_back({r[i][0], L[i]}); } arr<int,2>dist[n]; bool vis[n]; for(int i = 0; i < n; ++i) dist[i] = {INF,INF}, vis[i] = false; priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>>q; for(int i = 0; i < k; ++i) { q.push({0, p[i]}); dist[p[i]] = {0 , 0}; } while(!q.empty()) { int v = q.top().second; q.pop(); if(vis[v]) continue; vis[v] = true; for(auto i : g[v]) { int u = i[0]; int w = i[1]; if(dist[u][0] > dist[v][1] + w) { dist[u][1] = dist[u][0]; dist[u][0] = dist[v][1] + w ; q.push({dist[u][1], u}); } else if(dist[u][1] > dist[v][1] + w) { dist[u][1] = dist[v][1] + w; q.push({dist[u][1], u}); } } } return dist[0][1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...