제출 #984834

#제출 시각아이디문제언어결과실행 시간메모리
984834rshohruh사이버랜드 (APIO23_cyberland)C++17
0 / 100
44 ms9640 KiB
#include "cyberland.h" #include <vector> #include <bits/stdc++.h> using namespace std; using ll = long long; using node = pair<int, ll>; vector<vector<node>> g; void dfs(int u, int p, vector<int>& res){ if(u == p) return; res[u] = 1; for(auto [v, w]: g[u]) if(!res[v]) dfs(v, p, res); } 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) { // for(int x: arr) assert(x < 2); g.assign(N, vector<node>()); vector<ll> h(N, 1e18); for(int i = 0; i < M; ++i){ g[x[i]].emplace_back(y[i], c[i]); g[y[i]].emplace_back(x[i], c[i]); } vector<int> up(N), to(N); dfs(0, H, up); dfs(H, 0, to); for(int i = 0; i < N; ++i) up[i] &= to[i]; priority_queue<node, vector<node>, greater<node>> b; b.emplace(H, 0); while(!b.empty()){ auto [u, cur] = b.top(); b.pop(); if(h[u] <= cur) continue; h[u] = cur; for(auto [v, w]: g[u]) b.emplace(v, cur+w); } ll ans = 1e18; for(int i = 0; i < N; ++i) if(arr[i] == 0 && up[i] == 1) ans = min(ans, h[i]); return (ans == 1e18 ? -1 : 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...