# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
990013 | Mihailo | Cyberland (APIO23_cyberland) | C++17 | 981 ms | 22416 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "cyberland.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>
#define pll pair<long long, long long>
#define mp make_pair
#define pb push_back
#define xx first
#define yy second
using namespace std;
typedef long long ll;
vector<pair<__int128, long double> > adj[100100], v;
int a[100100], n, ks;
long double dis[100100], rez;
void dikstra() {
priority_queue<pair<__int128, __int128> > q;
pair<__int128, __int128> cur;
for(int i=0; i<=n; i++) dis[i]=-1;
// cout<<'\n';
for(int j=0; j<v.size(); j++) {
for(int i=0; i<adj[v[j].xx].size(); i++) {
if(dis[adj[v[j].xx][i].xx]==-1) q.push(mp(v[j].yy-adj[v[j].xx][i].yy, adj[v[j].xx][i].xx));
}
}
while(q.size()) {
cur=q.top();
q.pop();
// cout<<cur.xx<<' '<<cur.yy<<'\n';
if(dis[cur.yy]!=-1) continue;
dis[cur.yy]=-cur.xx;
for(int i=0; i<adj[cur.yy].size(); i++) {
if(dis[adj[cur.yy][i].xx]==-1) q.push(mp(cur.xx-adj[cur.yy][i].yy, adj[cur.yy][i].xx));
}
}
}
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) {
K=min(100, K);
for(int i=0; i<=N; i++) adj[i].clear();
for(int i=0; i<M; i++) {
adj[x[i]+1].pb(mp(y[i]+1, c[i]));
adj[y[i]+1].pb(mp(x[i]+1, c[i]));
}
adj[H+1].clear();
n=N;
a[0]=1;
a[1]=0;
for(int i=1; i<arr.size(); i++) {
a[i+1]=arr[i];
}
/////////
adj[0].pb(mp(1, 0));
v.clear();
v.push_back(mp(0, 0));
dikstra();
if(dis[H+1]==-1) return -1;
for(int i=1; i<=n; i++) {
if(dis[i]==-1) a[i]=1;
}
adj[0].clear();
/////////
for(int i=1; i<=N; i++) {
if(a[i]==0) adj[0].pb(mp(i, 0));
}
rez=1e30;
ks=K;
K++;
while(K--) {
dikstra();
if(dis[H+1]>=0) rez=min(rez, dis[H+1]*(ll)pow(2, K));
v.clear();
for(int i=1; i<=N; i++) {
if(a[i]==2) v.pb(mp(i, -dis[i]));
}
for(int i=0; i<=N; i++) {
for(int j=0; j<adj[i].size(); j++) adj[i][j].yy*=2;
}
}
return rez/((long double)pow(2, ks));
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |