Submission #1192014

#TimeUsernameProblemLanguageResultExecution timeMemory
1192014KhoaDuyCyberland (APIO23_cyberland)C++17
40 / 100
137 ms19784 KiB
#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){ 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){ 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=1e18; 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; } ans=min(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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...