# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
984855 | IUA_Hasin | 사이버랜드 (APIO23_cyberland) | C++17 | 43 ms | 24056 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "cyberland.h"
#include <bits/stdc++.h>
#define endl "\n"
#define yeap cout<<"YES"<<endl
#define nope cout<<"NO"<<endl
#define ll long long
#define ld long double
using namespace std;
const ll M = 3e5+5;
const ll INF = 5e15+69;
vector<ll> ind0;
vector<pair<ll, ll>> extra[M];
vector<pair<ll, ll>> graph[M];
vector<ll> dist(M, INF);
ll vis[M];
void dijkstra(ll source){
set<pair<ll, ll>> s;
s.insert({0, source});
dist[source] = 0;
while(s.size()>0){
auto node = *s.begin();
ll v = node.second;
ll v_dist = node.first;
s.erase(s.begin());
if(vis[v]==0){
for(auto child : graph[v]){
ll v2 = child.first;
ll wt = child.second;
if((dist[v]+wt)<(dist[v2])){
dist[v2] = dist[v]+wt;
s.insert({dist[v2], v2});
}
}
vis[v] = 1;
}
}
}
double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) {
for(int i=0; i<=N; i++){
extra[i].clear();
graph[i].clear();
dist[i] = INF;
vis[i] = 0;
}
ind0.clear();
for(int i=0; i<x.size(); i++){
ll a = x[i];
ll b = y[i];
ll wt = c[i];
if(a!=H && b!=H){
graph[a].push_back({b, wt});
graph[b].push_back({a, wt});
} else {
extra[a].push_back({b, wt});
extra[b].push_back({a, wt});
}
}
//
// for(int i=0; i<N; i++){
// for(int j=0; j<graph[i].size(); j++){
// cout << graph[i][j].first << " " << graph[i][j].second << endl;
// }
// cout<<endl;
//}
//okay
//
// for(int i=0; i<N; i++){
// for(int j=0; j<extra[i].size(); j++){
// cout << extra[i][j].first << " " << i<< endl;
// }
// cout<<endl;
// }
//okay
for(int i=0; i<arr.size(); i++){
if(arr[i]==0){
ind0.push_back(i);
}
}
//
// for(int i=0; i<ind0.size(); i++){
// cout << ind0[i] << " ";
// }
// cout<<endl;
//okay
dijkstra(0);
vector<ll> possibleind0;
for(int i=0; i<ind0.size(); i++){
ll a = ind0[i];
if(dist[a]!=INF){
possibleind0.push_back(a);
}
}
//
// for(int i=0; i<N; i++){
// cout << dist[i] << " ";
// }
// cout<<endl;
//okay
//
// for(int i=0; i<possibleind0.size(); i++){
// cout << possibleind0[i] << " ";
// }
// cout<<endl;
//okay
for(int i=0; i<=N; i++){
for(int j=0; j<extra[i].size(); j++){
graph[i].push_back(extra[i][j]);
}
}
//
// for(int i=0; i<N; i++){
// for(int j=0; j<graph[i].size(); j++){
// cout << graph[i][j].first << " " << graph[i][j].second << endl;
// }
// cout<<endl;
// }
//okay
for(int i=0; i<=N; i++){
//graph[i].clear();
dist[i] = INF;
vis[i] = 0;
}
dijkstra(0);
//
// for(int i=0; i<N; i++){
// cout << dist[i] << " ";
// }
// cout<<endl;
//
ll ans = dist[H];
if(dist[H]==INF){
return -1;
} else {
for(int i=0; i<=N; i++){
//graph[i].clear();
dist[i] = INF;
vis[i] = 0;
}
dijkstra(H);
//ans = INF;
for(int i=0; i<possibleind0.size(); i++){
ll a = ind0[i];
ll temp = dist[a];
ans = min(temp, ans);
}
return ans;
}
}
컴파일 시 표준 에러 (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... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |