| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 499593 | aryan12 | 악어의 지하 도시 (IOI11_crocodile) | C++17 | 545 ms | 93440 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 5;
set<long long> exits;
vector<pair<long long, long long> > g[MAXN];
long long values[MAXN][2];
bool vis[MAXN];
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
for(long long i = 0; i < MAXN; i++) {
values[i][0] = 1e15;
values[i][1] = 1e15;
}
for(long long i = 0; i < K; i++) {
exits.insert(P[i]);
}
for(long long 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]});
}
for(long long i = 0; i < N; i++) {
if(exits.count(i)) {
for(long long j = 0; j < g[i].size(); j++) {
int hi = g[i][j].first;
if(!exits.count(hi)) {
if(values[hi][1] < g[i][j].second) {
continue;
}
else if(values[hi][0] < g[i][j].second) {
values[hi][1] = g[i][j].second;
}
else {
values[hi][1] = values[hi][0];
values[hi][0] = g[i][j].second;
}
}
}
}
}
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >, greater<pair<long long, long long> > > pq;
for(long long i = 0; i < N; i++) {
if(values[i][1] != 1e15) {
pq.push({values[i][1], i});
}
}
while(!pq.empty()) {
pair<long long, long long> cur = pq.top();
pq.pop();
long long cur_dist = cur.first, node = cur.second;
if(vis[node]) {
continue;
}
if(node == 0) {
break;
}
vis[node] = true;
for(long long i = 0; i < g[node].size(); i++) {
if(exits.count(g[node][i].first) || vis[g[node][i].first]) {
continue;
}
long long new_dist = g[node][i].second + cur_dist;
long long next = g[node][i].first;
//cout << "node = " << node << ", next = " << next << ", cur_dist = " << cur_dist << ", new_dist = " << new_dist << endl;
if(values[next][1] < new_dist) {
continue;
}
else if(values[next][0] < new_dist) {
//assert(!vis[g[node][i].first]);
values[next][1] = new_dist;
pq.push({values[next][1], next});
}
else {
//assert(!vis[g[node][i].first]);
values[next][1] = values[next][0];
values[next][0] = new_dist;
pq.push({values[next][1], next});
}
}
}
while(!pq.empty()) {
pq.pop();
}
/*for(int i = 0; i < N; i++) {
cout << values[i][0] << " " << values[i][1] << endl;
}*/
assert(values[0][1] != 1e15);
return values[0][1];
}
컴파일 시 표준 에러 (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... | ||||
