This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define f first
#define s second
#define ent '\n'
using namespace std;
typedef long long ll;
const int mx=1e5+12;
vector<pair<int,int>> g[mx];
double d[mx][101];
bool was[mx][101];
bool used[mx];
void dfs(int v){
used[v]=1;
for(auto to:g[v]){
if(!used[to.f]){
dfs(to.f);
}
}
}
double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){
k=min(k,70);
for(int i=0;i<n;i++){
g[i].clear();
used[i]=0;
}
for(int i=0;i<m;i++){
g[x[i]].push_back({y[i],c[i]});
g[y[i]].push_back({x[i],c[i]});
}
dfs(0);
if(!used[h]){
return -1;
}
for(int i=0;i<n;i++){
for(int x=0;x<=k;x++){
d[i][x]=-2e14;
was[i][x]=0;
}
used[i]=0;
}
used[h]=1;
dfs(0);
priority_queue<pair<double,pair<int,int>>> s;
d[0][0]=0;
s.push({0,{0,0}});
for(int i=0;i<n;i++){
if(used[i] && arr[i]==0){
d[i][0]=0;
s.push({0,{i,0}});
}
}
while(s.size()){
int v=s.top().s.f,x=s.top().s.s;
s.pop();
if(v==h)continue;
if(was[v][x])continue;
was[v][x]=1;
for(auto To:g[v]){
int to=To.f, w=To.s;
if(d[to][x]<d[v][x]-w){
d[to][x]=d[v][x]-w;
s.push({-d[to][x],{to,x}});
}
if(x<k && d[to][x+1]<d[v][x]/(long double)2.0-w && arr[v]==2){
d[to][x+1]=d[v][x]/(long double)2.0-w;
s.push({-d[to][x+1],{to,x+1}});
}
}
}
double ans=2e14;
for(int x=k;x>=0;x--){
d[h][x]*=-1;
if(d[h][x]>=2e14)continue;
ans=min(ans,d[h][x]);
if(arr[h]==2 && x>0 && d[h][x-1]<2e14)ans=min(ans,d[h][x-1]/(double)2.0);
}
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... |