제출 #973382

#제출 시각아이디문제언어결과실행 시간메모리
973382AbitoCyberland (APIO23_cyberland)C++17
15 / 100
504 ms73864 KiB
#include "cyberland.h" #include <bits/stdc++.h> #define F first #define S second #define elif else if #define pb push_back using namespace std; const int N=1e5+5; int n,m,k,a[N],h; double dis[N][95]; vector<pair<int,int>> adj[N]; bool vis[N][95]; vector<int> v; void dfs(int x){ if (!a[x] && x) v.pb(x); vis[x][94]=1; for (auto u:adj[x]){ if (vis[u.F][94]) continue; dfs(u.F); }return; } void dijkstra(){ priority_queue<pair<double,pair<int,int>>> pq; for (auto u:v) pq.push({0,{u,0}}),dis[u][0]=0; if (pq.empty()) pq.push({0,{0,0}}),dis[0][0]=0; while (!pq.empty()){ int i=pq.top().S.F,j=pq.top().S.S; //cout<<i<<' '<<j<<endl; pq.pop(); if (vis[i][j] || i==h) continue; vis[i][j]=1; for (auto u:adj[i]){ if (dis[i][j]+u.S<dis[u.F][j] || dis[u.F][j]<0){ dis[u.F][j]=dis[i][j]+u.S; pq.push({-dis[u.F][j],{u.F,j}}); } if (a[u.F]==2){ if ((dis[i][j]+u.S)/2.0<dis[u.F][j+1] || dis[u.F][j+1]<0){ dis[u.F][j+1]=(dis[i][j]+u.S)/2.0; pq.push({-dis[u.F][j+1],{u.F,j+1}}); } } } }return; } 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) { n=N;m=M;k=min(K,90);v.clear();h=H; for (int i=0;i<n;i++){ adj[i].clear(); for (int j=0;j<=k;j++) vis[i][j]=0,dis[i][j]=-1; vis[i][94]=0; } for (int i=0;i<m;i++){ adj[x[i]].pb({y[i],c[i]}); adj[y[i]].pb({x[i],c[i]}); } for (int i=0;i<n;i++) a[i]=arr[i]; dfs(0); dijkstra(); double ans=-1; for (int i=0;i<=k;i++) if (dis[H][i]>=0 && (ans==-1 || dis[H][i]<ans)) ans=dis[H][i]; 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...