#include <bits/stdc++.h>
using namespace std;
const double INF = 5e18;
const int mxN = 2e5+100;
#define fi first
#define se second
#define all(v) v.begin(), v.end()
bool can_vis[mxN];
double dist[mxN];
vector<pair<int,double>> adj[mxN];
void dfs(int u,int H){
can_vis[u]=1;
if(u==H) return;
for(auto it:adj[u]){
if(!can_vis[it.fi]) dfs(it.fi,H);
}
}
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) adj[i].clear(),dist[i]=INF,can_vis[i]=0;
for(int i=0;i<M;++i){
adj[x[i]].push_back({y[i],(double)c[i]});
adj[y[i]].push_back({x[i],(double)c[i]});
}
dfs(0,H);
if(!can_vis[H]) return -1;
priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>> pq;
for(int i=0;i<N;++i){
if(arr[i]==0&&can_vis[i]){
pq.push({0,i}),dist[i]=0;
}
}
while(pq.size()){
auto tp=pq.top(); // dist,node
pq.pop();
if(tp.se==H) break;
if(dist[tp.se]<tp.fi) continue;
for(auto it:adj[tp.se]){
if(dist[it.fi]>tp.fi+it.se){
dist[it.fi]=tp.fi+it.se;
pq.push({dist[it.fi],it.fi});
}
}
}
double prv=dist[H];
for(int i=0;i<N;++i) dist[i]=INF;
dist[0]=0;
pq.push({0,0});
while(pq.size()){
auto tp=pq.top(); // dist,node
pq.pop();
if(tp.se==H) break;
if(dist[tp.se]<tp.fi) continue;
for(auto it:adj[tp.se]){
if(dist[it.fi]>tp.fi+it.se){
dist[it.fi]=tp.fi+it.se;
pq.push({dist[it.fi],it.fi});
}
}
}
return (double)(min(prv,dist[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... |