제출 #773055

#제출 시각아이디문제언어결과실행 시간메모리
773055JakobZorzCyberland (APIO23_cyberland)C++17
15 / 100
24 ms7932 KiB
#include "cyberland.h"
#include <vector>
#include <iostream>
#include <limits.h>
#include <queue>
#include <algorithm>
typedef long long ll;
const double MAX_DIST=1e18;
using namespace std;

int n,m,k,h;
vector<pair<int,double>>nodes[100000];
double dist[100000];

double solve(int N,int M,int K,int H,vector<int>x,vector<int>y,vector<int>c,vector<int>arr){
    n=N;
    m=M;
    k=K;
    h=H;
    for(int i=0;i<n;i++){
        nodes[i].clear();
        dist[i]=MAX_DIST;
    }
    for(int i=0;i<m;i++){
        nodes[x[i]].emplace_back(y[i],c[i]);
        nodes[y[i]].emplace_back(x[i],c[i]);
    }
    dist[0]=0;
    queue<int>q;
    for(int i=0;i<n;i++){
        if(arr[i]==0){
            dist[i]=0;
            q.push(i);
        }
    }
    q.push(0);
    while(!q.empty()){
        int curr=q.front();
        q.pop();
        for(pair<int,ll>ne:nodes[curr]){
            double new_dist=dist[curr]+ne.second;
            if(new_dist<dist[ne.first]){
                dist[ne.first]=new_dist;
                q.push(ne.first);
            }
        }
    }
    
    double res=dist[h];
    if(res==MAX_DIST)
        res=-1;

    return res;
}
#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...