#include <bits/stdc++.h>
#define ll long long
#define sz(x) int(x.size())
#define all(x) x.begin(),x.end()
#define fr first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
const int MAXN=1e5+1;
vector<pair<ll,ll>>grafo[MAXN];
ll n, h, m, k;
bool vis[MAXN];
vector<int>ar;
ll dijkstra()
{
priority_queue<pair<ll,ll>>pq;
vector<ll>proc(n,0);
vector<ll>dist(n,LLONG_MAX);
dist[h]=0;
pq.push({0,h});
while(pq.size())
{
ll nod=pq.top().se;
pq.pop();
if(proc[nod])
continue;
proc[nod]=1;
for(auto k:grafo[nod])
{
if(dist[nod]+k.se<dist[k.fr])
{
dist[k.fr]=dist[nod]+k.se;
pq.push({-dist[k.fr],k.fr});
}
}
}
ll mi=dist[0];
for(ll i=1; i<n; i++)
if(!ar[i]&&vis[i]&&i!=h)
mi=min(mi,dist[i]);
return mi;
}
void dfs(ll nod)
{
vis[nod]=1;
if(nod==h)
return;
for(auto k:grafo[nod])
{
if(!vis[k.fr])
dfs(k.fr);
}
}
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) {
ar=arr;
memset(vis,0,sizeof(vis));
ll i;
n=N;
m=M;
k=K;
h=H;
for(i=0; i<n; i++)
grafo[i].resize(0);
for(i=0; i<M; i++)
{
grafo[x[i]].pb({y[i],c[i]});
grafo[y[i]].pb({x[i],c[i]});
}
dfs(0);
ll res=dijkstra();
if(res==LLONG_MAX)
return double(-1);
return double(res);
}
# | 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... |