이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define f first
#define s second
#define ent '\n'
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")
using namespace std;
typedef long long ll;
const int mx=1e5+12;
vector<pair<int,int>> g[mx];
double d[mx][101];
bool was[mx][101];
bool used[mx];
struct node{
int v,x;
double w;
friend bool operator <(node a,node b){
return a.w > b.w;
}
};
void dfs(int v){
used[v]=1;
for(auto to:g[v]){
if(!used[to.f]){
dfs(to.f);
}
}
}
double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){
k=min(k,67);
for(int i=0;i<n;i++){
g[i].clear();
used[i]=0;
}
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]});
}
dfs(0);
if(!used[h]){
return -1;
}
for(int i=0;i<n;i++){
for(int x=0;x<=k+1;x++){
d[i][x]=1e18;
was[i][x]=0;
}
used[i]=0;
}
used[h]=1;
dfs(0);
priority_queue<node> s;
d[0][0]=0;
s.push({0,0,0});
for(int i=0;i<n;i++){
if(used[i] && arr[i]==0){
d[i][0]=0;
s.push({i,0,0});
}
}
vector<pair<int,int>> q;
for(int x=0;x<=k;x++){
while(s.size()){
int v=s.top().v,x=s.top().x;
double w=s.top().w;
s.pop();
if(v==h)continue;
if(w>d[v][x]){
continue;
}
for(const auto &To:g[v]){
if(d[To.f][x]>d[v][x]+To.s){
d[To.f][x]=d[v][x]+To.s;
s.push({To.f,x,d[To.f][x]});
}
if(x<k && d[To.f][x+1]>d[v][x]/2+To.s && arr[v]==2){
d[To.f][x+1]=d[v][x]/2+To.s;
q.push_back({To.f,x+1});
}
}
}
for(auto x:q){
if(was[x.f][x.s])continue;
was[x.f][x.s]=1;
s.push({x.f,x.s,d[x.f][x.s]});
}
}
double ans=1e18;
for(int x=k;x>=0;x--){
if(d[h][x]>=1e18)continue;
ans=min(ans,d[h][x]);
if(arr[h]==2 && x>0 && d[h][x-1]<2e14)ans=min(ans,d[h][x-1]/(double)2.0);
}
return ans;
}
# | 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... |