Submission #976688

#TimeUsernameProblemLanguageResultExecution timeMemory
976688Mr_Husanboy사이버랜드 (APIO23_cyberland)C++17
0 / 100
30 ms7260 KiB
#include "cyberland.h" #include<bits/stdc++.h> using namespace std; #define ll long long #define all(a) (a).begin(), (a).end() #ifdef LOCAL #include "debugger.cpp" #else #define debug(...) #endif const ll infl = 1e18; struct DSU{ vector<int> par, sz; int n; DSU (int _n){ n = _n; par.resize(n); iota(all(par), 0); sz.assign(n, 1); } DSU (){} int get(int a){ return (par[a] == a ? a : par[a] = get(par[a])); } void init(int _n){ n = _n; par.resize(n); iota(all(par), 0); sz.assign(n, 1); } void unite(int a, int b){ a = get(a); b = get(b); if(a == b) return; if(sz[a] < sz[b]) swap(a,b); sz[a] += sz[b]; par[b] = a; } void link(int a, int b){ a = get(a); b = get(b); if(a == b) return; sz[b] += sz[a]; par[a] = b; } }; double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { vector<vector<pair<int,double>>> g(n); DSU ds(n); 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]}); ds.unite(x[i], y[i]); } if(ds.get(0) != ds.get(n - 1)){ return -1; } priority_queue<pair<double, int>> q; vector<bool> vis(n); vector<double> dis(n, infl); dis[n - 1] = 0; q.push({0, n - 1}); double mn = infl; while(!q.empty()){ int t = q.top().second; q.pop(); if(vis[t]) continue; vis[t] = 1; for(auto [u, w] : g[t]){ if(arr[u] == 0) mn = min(mn, dis[t] + w); if(dis[u] > dis[t] + w){ dis[u] = dis[t] + w; q.push({-dis[u], u}); } } } assert(m == n - 1); //debug(dis); return min(mn, dis[0]); }
#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...