#include "cyberland.h"
#include <bits/stdc++.h>
using namespace std;
const long long inf=1e18;
bool u[100005]; vector <pair<int,long long> > v[100005];
vector <int> pt; int h;
void dfs(int i){
u[i]=1; if (i==h) return;
for (auto j:v[i]){
if (!u[j.first]) dfs(j.first);
}
}
double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
for (int i=0; i<N; i++) v[i].clear(); h=H;
for (int i=0; i<M; i++){
v[x[i]].push_back({y[i],c[i]});
v[y[i]].push_back({x[i],c[i]});
}
arr[0]=0; set <pair<long long,int>> s;
long long d[N]; d[0]=0;
for (int i=1; i<N; i++){
assert(arr[i]!=2); d[i]=inf;
}
for (int i=0; i<N; i++) u[i]=0; pt.clear();
dfs(0); //cout<<u[54]<<"\n";
for (int i=0; i<N; i++){
if (arr[i]==0 && u[i]){
s.insert({0,i}); d[i]=0;
}
}
while (!s.empty()){
int X=s.begin()->second; s.erase(s.begin());
for (auto i:v[X]){
if (d[i.first]>d[X]+i.second){
s.erase({d[i.first],i.first});
d[i.first]=d[X]+i.second;
s.insert({d[i.first],i.first});
}
}
}
// int xx=H; cout<<xx<<" ";
// while (xx>0){
// for (auto j:v[xx]){
// if (d[j.first]+j.second==d[xx]){
// xx=j.first;
// break;
// }
// } cout<<xx<<" ";
// } cout<<"\n";
//for (int i=0; i<N; i++) cout<<i<<" -> "<<d[i]<<"\n";
if (d[H]==inf) return -1;
return d[H];
}
# | 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... |