제출 #1009148

#제출 시각아이디문제언어결과실행 시간메모리
1009148pcc사이버랜드 (APIO23_cyberland)C++17
15 / 100
356 ms10200 KiB
#include "cyberland.h" #include <vector> #include <bits/stdc++.h> using namespace std; #define ld double #define pii pair<int,int> #define fs first #define sc second const ld inf = 1e15; const int mxn = 1e5+10; const int lim = 60; ld dist[mxn]; vector<pii> paths[mxn]; int N,M; struct DSU{ int dsu[mxn],sz[mxn]; void init(int n){ for(int i = 0;i<n;i++)dsu[i] = i,sz[i] = 1; } int root(int k){ return k == dsu[k]?k:dsu[k] = root(dsu[k]); } void onion(int a,int b){ a = root(a),b = root(b); if(a == b)return; if(sz[a]<sz[b])swap(a,b); dsu[b] = a; sz[a] += sz[b]; return; } }; namespace DIJKSTRA{ bitset<mxn> done; priority_queue<pair<ld,int>,vector<pair<ld,int>>,greater<pair<ld,int>>> pq; void GO(){ for(int i = 0;i<N;i++){ done[i] = 0; pq.push(make_pair(dist[i],i)); } while(!pq.empty()){ auto now = pq.top().sc; pq.pop(); if(done[now])continue; done[now] = true; for(auto &[nxt,w]:paths[now]){ if(done[nxt])continue; if(dist[nxt]>dist[now]+w){ dist[nxt] = dist[now]+w; pq.push(make_pair(dist[nxt],nxt)); } } } return; } } DSU dsu; void init(){ for(int i = 0;i<N;i++)paths[i].clear(); } double solve(int NN, int MM, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> z, std::vector<int> arr) { init(); N = NN,M = MM; dsu.init(N); for(int i = 0;i<M;i++){ int a = x[i],b = y[i],c = z[i]; dsu.onion(a,b); paths[a].push_back(pii(b,c)); paths[b].push_back(pii(a,c)); } if(dsu.root(0) != dsu.root(H)){ return -1; } for(int i = 0;i<N;i++){ if(dsu.root(i) == dsu.root(0)&&arr[i] == 0)dist[i] = 0; else dist[i] = inf; } dist[0] = 0; ld ans = inf; for(int i = 0;i<=min(K,lim);i++){ DIJKSTRA::GO(); ans = min(ans,dist[H]); for(int j = 0;j<N;j++){ if(arr[j]==2)dist[j]/=2; } } 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...