# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
637162 | ghostwriter | Crocodile's Underground City (IOI11_crocodile) | C++14 | 2 ms | 2644 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include <debug.h>
#include "grader.cpp"
#endif
#define st first
#define nd second
#define pb push_back
#define pf push_front
#define _pb pop_back
#define _pf pop_front
#define lb lower_bound
#define ub upper_bound
#define mtp make_tuple
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
typedef long long ll; typedef unsigned long long ull;
typedef double db; typedef long double ldb;
typedef pair<int, int> pi; typedef pair<ll, ll> pll;
typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pi> vpi; typedef vector<pll> vpll;
typedef string str;
template<typename T> T gcd(T a, T b) { return (b == 0? a : gcd(b, a % b)); }
template<typename T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
#define FOR(i, l, r) for (int (i) = (l); (i) <= (r); ++(i))
#define FOS(i, r, l) for (int (i) = (r); (i) >= (l); --(i))
#define EACH(i, x) for (auto &(i) : (x))
#define WHILE while
#define file "TEST"
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
ll rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rd); }
/*
Tran The Bao
CTL - Da Lat
Cay ngay cay dem nhung deo duoc cong nhan
*/
struct Vertex {
int u, Min;
Vertex() {}
Vertex(int u, int Min) : u(u), Min(Min) {}
};
struct cmp {
bool operator()(Vertex a, Vertex b) {
return a.Min > b.Min;
}
};
const int oo = 1e9 + 1;
const int NMAX = 1e5 + 1;
pi d[NMAX];
vpi adj[NMAX];
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
FOR(i, 0, N - 1) d[i] = {oo, oo};
FOR(i, 0, M - 1) {
int u = R[i][0], v = R[i][1], w = L[i];
adj[u].pb({v, w});
adj[v].pb({u, w});
}
priority_queue<Vertex, vector<Vertex>, cmp> pq;
FOR(i, 0, K - 1) {
int u = P[i];
d[u] = {0, 0};
pq.push(Vertex(u, 0));
}
WHILE(!pq.empty()) {
Vertex cur = pq.top();
pq.pop();
int u = cur.u, Min = cur.Min;
if (Min > d[u].nd) continue;
if (u == 0) return Min;
EACH(j, adj[u]) {
int v = j.st, w = j.nd;
if (d[v].nd > Min + w) {
// int tmp = d[v].nd;
d[v].nd = Min + w;
if (d[v].st > d[v].nd) swap(d[v].st, d[v].nd);
// if (d[v].nd < tmp) pq.push(Vertex(v, d[v].nd));
}
}
}
return N;
}
/*
5 4 3
0 1 2
0 2 3
3 2 1
2 4 4
1
3
4
7
5 7 2
0 2 4
0 3 3
3 2 2
2 1 10
0 1 100
0 4 7
3 4 9
1
3
14
*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |