제출 #1271037

#제출 시각아이디문제언어결과실행 시간메모리
1271037abdelhakim사이버랜드 (APIO23_cyberland)C++20
15 / 100
3095 ms12604 KiB
#include "cyberland.h" #include <bits/stdc++.h> #define ll long long #define inf 1e17 #define dbg(x) cerr<<#x<<' '<<x<<endl; using namespace std; vector<bool> vis; vector<ll> zeros; vector<ll> tws; vector<vector<pair<ll,ll>>> adj; void dfs(ll node, vector<int>& arr) { vis[node]=true; if(arr[node]==0) zeros.push_back(node); else if(arr[node]==2) tws.push_back(node); for (auto &&e : adj[node]) { if(!vis[e.first]) { dfs(e.first,arr); } } } 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) { vis.clear(); adj.clear(); vis.assign(N,false); adj.assign(N,vector<pair<ll,ll>>()); zeros.clear(); tws.clear(); zeros.push_back(0); for (int i=0;i<M;i++) { adj[x[i]].push_back({y[i],c[i]}); adj[y[i]].push_back({x[i],c[i]}); } dfs(0,arr); if(!vis[H]) return -1; vector<double> dist(N,inf); priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>> pq; dist[H]=0; pq.push({0,H}); auto dij=[&]() { while(!pq.empty()) { ll nd=pq.top().second; pq.pop(); for (auto &&e : adj[nd]) { if(dist[e.first] > dist[nd]+e.second) { dist[e.first]=dist[nd]+e.second; pq.push({dist[e.first],e.first}); } } } }; dij(); for (int i=0;i<K;i++) { for (auto &&e : tws) { double val = dist[e]/2; for (auto &&ei : adj[e]) { dist[ei.first]=min(dist[ei.first],val+ei.second); pq.push({dist[ei.first],ei.first}); } } dij(); } double ans=inf; for (auto &&e : zeros) { ans=min(ans,dist[e]); } 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...