이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
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){
vector<pair<int, int>> g[N];
for(int i = 0;i < M;i++){
g[x[i]].emplace_back(y[i], c[i]);
g[y[i]].emplace_back(x[i], c[i]);
}
long long d[N];
fill(d, d+N, LONG_LONG_MAX);
d[H] = 0;
set<pair<long long, int>> s;
s.insert(make_pair(0, H));
while(!s.empty()){
auto p = *s.begin();
s.erase(s.begin());
for(auto [c, co] : g[p.second]){
if(p.first + co < d[c]){
auto f = s.find(make_pair(d[c], c));
if(f != s.end()) s.erase(f);
d[c] = p.first+co;
s.insert(make_pair(d[c], c));
}
}
}
if(d[0] == LONG_LONG_MAX) return -1;
long long ans = d[0];
queue<int> q;
q.push(0);
bool v[N] = {false};
v[0] = v[H] = true;
while(!q.empty()){
int t = q.front();
q.pop();
if(!arr[t]) ans = min(ans, d[t]);
for(auto [c, co] : g[t]) if(!v[c]) {
v[c] = true;
q.push(c);
}
}
return ans;
}
# | 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... |