#include "cyberland.h"
#include <bits/stdc++.h>
using namespace std;
double solve(int n,int m,int k,int h,vector<int> x,vector<int> y,vector<int> c,vector<int> a){
k=min(k,70);
vector<vector<pair<int,int>>> graph(n);
for(int i=0;i<m;i++){
graph[x[i]].push_back({y[i],c[i]});
graph[y[i]].push_back({x[i],c[i]});
}
bool del[n];
for(int i=0;i<n;i++){
del[i]=true;
}
queue<int> q;
q.push(0);
del[0]=false;
while(!q.empty()){
int u=q.front();
q.pop();
for(pair<int,int> &x:graph[u]){
int v=x.first;
if(v!=h&&del[v]){
del[v]=false;
q.push(v);
}
}
}
double DP[k+1][n];
for(int i=0;i<=k;i++){
for(int j=0;j<n;j++){
DP[i][j]=-1;
}
}
a[0]=0;
priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>> pq;
for(int i=0;i<n;i++){
if(!del[i]&&a[i]==0){
DP[0][i]=0;
pq.push({0,i});
}
}
for(int p=0;p<=k;p++){
if(p>0){
for(int u=0;u<n;u++){
if(!del[u]&&a[u]==2){
for(pair<int,int> &x:graph[u]){
int v=x.first,w=x.second;
if(v==h||del[v]){
continue;
}
double nxt=(DP[p-1][v]+w)/2.0;
if(DP[p][u]==-1||DP[p][u]>nxt){
DP[p][u]=nxt;
}
}
if(DP[p][u]!=-1){
pq.push({DP[p][u],u});
}
}
}
}
while(!pq.empty()){
double d=pq.top().first;
int u=pq.top().second;
pq.pop();
if(d>DP[p][u]){
continue;
}
for(pair<int,int> &x:graph[u]){
int v=x.first,w=x.second;
if(v==h||del[v]){
continue;
}
if(DP[p][v]==-1||DP[p][v]>DP[p][u]+w){
DP[p][v]=DP[p][u]+w;
pq.push({DP[p][v],v});
}
}
}
}
double ans=-1;
for(pair<int,int> &x:graph[h]){
int v=x.first,w=x.second;
if(del[v]){
continue;
}
for(int j=0;j<=k;j++){
if(DP[j][v]==-1){
continue;
}
if(ans==-1||ans>DP[j][v]+w){
ans=DP[j][v]+w;
}
}
}
return ans;
}
/*signed main(){
cout << solve(4, 4, 30, 3, {0, 0, 1, 2}, {1, 2, 3, 3}, {5, 4, 2, 4}, {1, 0, 2, 1});
}*/
# | 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... |