제출 #1168462

#제출 시각아이디문제언어결과실행 시간메모리
1168462rayan_bd사이버랜드 (APIO23_cyberland)C++20
5 / 100
1153 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; const double INF = 5e9+0.1; const int mxN = 1e5+100; vector<pair<int,int>> adj[mxN]; vector<int> ar; double ans=INF; struct DSU{ vector<int> sz,par; void init(int n){ sz.resize(n,1); par.resize(n); for(int i=1;i<n;++i) par[i]=i; } int findPar(int u){ if(par[u]==u) return u; return par[u]=findPar(par[u]); } void unite(int u,int v){ int upar=findPar(u); int vpar=findPar(v); if(upar==vpar) return; if(sz[upar]>sz[vpar]){ par[vpar]=upar; sz[upar]+=sz[vpar]; }else{ par[upar]=vpar; sz[vpar]+=sz[upar]; } } }; double dfs(int u,int par,int h,double cost){ if(u==h) return cost; if(ar[u]==2) cost/=2; else if(ar[u]==0) cost=0; double ans=INF; for(auto it:adj[u]){ if(it.first^par){ ans=min(ans,dfs(it.first,u,h,cost+it.second)); } } return ans; } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){ ar=arr; DSU ds; ds.init(N+5); for(int i=0;i<=N;++i) adj[i].clear(); 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]}); ds.unite(x[i],y[i]); } if(ds.findPar(0)!=ds.findPar(H)) return -1; return dfs(0,-1,H,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...