제출 #1365498

#제출 시각아이디문제언어결과실행 시간메모리
1365498settop사이버랜드 (APIO23_cyberland)C++20
0 / 100
3094 ms64196 KiB
#include "cyberland.h"
#include<bits/stdc++.h>
using namespace std;

#define doubla long double
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define sz(X) (int)x.size()
const int MAXN=1e5+10;
const long double inf=1e17;
typedef tuple<int,int,int> trio;
typedef pair<int,int> pii;
typedef pair<long double,int> pd;

int n;
long double dp[MAXN][35];
vector<pii> g[MAXN];
bool vis[MAXN];

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) {
    fall(i,0,M-1) g[x[i]].pb({y[i],c[i]}),g[y[i]].pb({x[i],c[i]});
    vector<int> starts; starts.pb(0);

    auto dfs=[&](auto &&self,int x)->void{
        if(x && !arr[x]) starts.pb(x);
        vis[x]=1;
        for(auto [u,j]:g[x]) if(!vis[u]) self(self,u);
    };
    dfs(dfs,0);
    if(!vis[H]) return -1;

    n=N;
    fall(i,0,n-1)
        fall(j,0,K) dp[i][j]=inf;
    priority_queue<pd,vector<pd>,greater<pd>> fila[K+1];
    for(auto x:starts) dp[x][0]=0,fila[0].push({0,x});

    long double res=inf;
    fall(t,0,K){
        while(!fila[t].empty()){
            auto [d,x]=fila[t].top(); fila[t].pop();
            if(dp[x][t]!=d || x==H) continue;
            for(auto [u,w]:g[x]){
                if(dp[u][t]>dp[x][t]+w){
                    dp[u][t]=dp[x][t]+w;
                    fila[t].push({dp[u][t],u});
                }
                if(arr[u]==2 && dp[u][t+1]>(dp[x][t]+w)/2.00){
                    dp[u][t+1]=(dp[x][t]+w)/2.000;
                    fila[t+1].push({dp[u][t+1],u});
                }
            }
        }
        res=min(res,dp[H][t]);
    }
    return res;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…