제출 #824266

#제출 시각아이디문제언어결과실행 시간메모리
824266trangtranha28악어의 지하 도시 (IOI11_crocodile)C++14
0 / 100
2 ms3412 KiB
#include "crocodile.h" #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #include <climits> #include <vector> #include <queue> #include <map> #include <set> using namespace std; const int MAXN = 1e5 + 2; int n, m; int dis[MAXN] = {0}, dis2[MAXN] = {0}; bool check[MAXN] = {false}; vector <int> exits; vector <pair <int, int> > adj[MAXN]; int Dijkstra() { // reset: memset(dis, 63, sizeof(dis)); memset(dis2, 63, sizeof(dis2)); // main: priority_queue <pair <int, int>, vector <pair <int, int> >, greater <pair <int, int> > > pq; for(int i = 0; i < (int)(exits.size()); i++) { dis[exits[i]] = 0; dis2[exits[i]] = 0; pq.push(make_pair(0, exits[i])); } while(pq.empty() == false) { int u = pq.top().second; pq.pop(); if(check[u] == false) { continue; } check[u] = true; for(int i = 0; i < (int)(adj[u].size()); i++) { int v = adj[u][i].first, w = adj[u][i].second; if(dis[v] > dis2[u] + w) { dis2[v] = dis[v]; dis[v] = dis2[u] + w; pq.push(make_pair(dis2[v], v)); } else if(dis2[v] > dis2[u] + w) { dis2[v] = dis2[u] + w; pq.push(make_pair(dis2[v], v)); } } } return dis2[0]; } int travel_plan(int N, int M, int R[][2], int L[], int k, int p[]) { n = N, m = M; for(int i = 0; i < m; i++) { int a = R[i][0], b = R[i][1], c = L[i]; adj[a].push_back(make_pair(b, c)); adj[b].push_back(make_pair(a, c)); } for(int i = 0; i < k; i++) { exits.push_back(p[i]); } return Dijkstra(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...