Submission #984105

#TimeUsernameProblemLanguageResultExecution timeMemory
984105MalixCyberland (APIO23_cyberland)C++17
8 / 100
3051 ms265432 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair ll INF=1e18+1; 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) { //DFS from start vector<pii> a(N); REP(i,0,M){ a[x[i]].PB({y[i],i}); a[y[i]].PB({x[i],i}); } priority_queue<int> pq; vi b(N,0); pq.push(0); while(!pq.empty()){ int k1=pq.top(); pq.pop(); b[k1]=1; if(k1==H)continue; for(auto u:a[k1]){ if(b[u.F]==1)continue; pq.push(u.F); } } if(b[H]==0)return -1; double ans=0;bool flag=0; //Djikistra from end priority_queue<pair<int,double>,vector<pair<int,double>>,greater<pair<int,double>>> pq2; vector<double> d(N,INF); d[H]=0.0; vi val(N,1); K*=2; for(auto u:a[H]){ d[u.F]=(double)c[u.S]; pq2.push({d[u.F],u.F}); val[u.F]=min(K,val[H]*arr[u.F]); } while(!pq2.empty()){ //distance double p=pq2.top().F; //vertice int q=pq2.top().S; pq2.pop(); if(d[q]<p)continue; if(arr[q]==0){ if(b[q]==1){ ans=d[q]; //cout<<"a"; flag=1; break; } else{ continue; } } for(auto u:a[q]){ if(d[u.F]<=d[q]+(double)c[u.S]/val[q])continue; d[u.F]=d[q]+(double)c[u.S]/val[q]; pq2.push({d[u.F],u.F}); val[u.F]=min(K,val[q]*arr[u.F]); } } if(flag)return ans; else return d[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...