제출 #1368743

#제출 시각아이디문제언어결과실행 시간메모리
1368743KALARRY사이버랜드 (APIO23_cyberland)C++20
20 / 100
463 ms59576 KiB
//chockolateman

#include<bits/stdc++.h>
// #include "cyberland.h"

using namespace std;

const double INF = 1e15;

int n,T,status[100005];
double dist[100005][105];
bool visited[100005][105];
vector<pair<int,int>> adj[100005];

void Dijkstra()
{
    for(int i = 0 ; i < n ; i++)
        for(int k = 0 ; k <= 100 ; k++)
        {
            dist[i][k] = INF;
            visited[i][k] = false;
        }
    for(int k = 0 ; k <= 100 ; k++)
    {
        visited[T][k] = true;
        dist[0][k] = 0;
    }
    priority_queue<pair<double,pair<int,int>>> q;
    q.push({0,{0,0}});
    while(!q.empty())
    {
        int v = q.top().second.first;
        int k = q.top().second.second;
        q.pop();
        if(visited[v][k])
            continue;
        visited[v][k] = true;
        for(auto e : adj[v])
        {
            int u = e.first;
            int w = e.second;
            double cur = dist[v][k] + w; 
            if(status[u]==0)
                cur = 0;
            if(cur < dist[u][k])
            {
                dist[u][k] = cur;
                q.push({-cur,{u,k}});
            }
            if(status[u]==2 && k < 100)
            {
                cur /= 2.00;
                if(cur < dist[u][k+1])
                {
                    dist[u][k+1] = cur;
                    q.push({-cur,{u,k+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) {
    n = N;
    T = H;
    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]});
    }
    for(int i = 0 ; i < N ; i++)
        status[i] = arr[i];
    Dijkstra();
    double ret = INF;
    for(int k = 0 ; k <= min(K,100) ; k++)
        ret = min(ret,dist[H][k]);
    if(ret >= INF-5)
        ret = -1;
    for(int i = 0 ; i < N ; i++)
        adj[i].clear();
    return ret;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…