제출 #926910

#제출 시각아이디문제언어결과실행 시간메모리
926910Wansur사이버랜드 (APIO23_cyberland)C++17
100 / 100
1183 ms100180 KiB
#include <bits/stdc++.h> #define f first #define s second #define ent '\n' #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") 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]; struct node{ int v,x; double w; friend bool operator <(node a,node b){ return a.w > b.w; } }; 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,67); 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+1;x++){ d[i][x]=1e18; was[i][x]=0; } used[i]=0; } used[h]=1; dfs(0); priority_queue<node> 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({i,0,0}); } } vector<pair<int,int>> q; for(int x=0;x<=k;x++){ while(s.size()){ int v=s.top().v,x=s.top().x; double w=s.top().w; s.pop(); if(v==h)continue; if(w>d[v][x]){ continue; } for(const auto &To:g[v]){ if(d[To.f][x]>d[v][x]+To.s){ d[To.f][x]=d[v][x]+To.s; s.push({To.f,x,d[To.f][x]}); } if(x<k && d[To.f][x+1]>d[v][x]/2+To.s && arr[v]==2){ d[To.f][x+1]=d[v][x]/2+To.s; q.push_back({To.f,x+1}); } } } for(auto x:q){ if(was[x.f][x.s])continue; was[x.f][x.s]=1; s.push({x.f,x.s,d[x.f][x.s]}); } } double ans=1e18; for(int x=k;x>=0;x--){ if(d[h][x]>=1e18)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 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...