답안 #976857

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
976857 2024-05-07T08:03:06 Z AlperenT_ 사이버랜드 (APIO23_cyberland) C++17
100 / 100
2978 ms 192196 KB
#include "cyberland.h"

#include <vector>
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#define pb push_back
#define F first
#define S second 
#define all(a) a.begin(),a.end()
#define pii pair <int,int>
#define PII pair<pii , pii>
#define ld long double
#define ll long long 
#define sz(v) (int)v.size()
#define rep(i , a , b) for(int i=a;i <= b;i++)
#define per(i , a , b) for(int i=a;i >= b;i--)
using namespace std ;
const ll maxn = 2e5+10  , N = 1e5 +1  , maxq = 202   , inf = 1e18  , maxk = 2022  , mod =1e9+7 ;
ld dis[maxn][102] ;int mark[maxn] ,is[maxn] , is2[maxn];
vector <pair<int,ld> > G[maxn] ;
void dfs(int v){
    is[v] =1 ;
    for(auto x : G[v]){
        if(is[x.F]==1)continue ;
        dfs(x.F) ;
    }
}
int H ;
void dfs2(int v){
    is2[v] = 1 ;
    for(auto x : G[v]){
        if(is2[x.F] == 1 ||x.F==H)continue ;
        dfs2(x.F) ;
    }
}

double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> t) {
    H = h ;
    rep(i , 0 , n-1)G[i].clear() ;
    rep(i , 0, n-1)is[i] = is2[i] =0  ;
    rep(i , 0 ,m-1){
        G[x[i]].pb({y[i] , c[i]});
        G[y[i]].pb({x[i] , c[i]}) ;
    }
    dfs(h) ;
    dfs2(0) ;
    if(is[0]== 0)return -1 ;
    k = min(k , 70);
    rep(j , 0 , n-1)rep(z , 0 , k)dis[j][z] = inf ;
    for(auto x : G[h]){
        dis[x.F][0] = x.S; 
    }
    ld ans =inf;
    rep(i , 0 , k){
        priority_queue <pair<ld,int> > pq ;
        rep(j , 0 , n-1){
            pq.push({-dis[j][i] , j}) ;
            mark[j] =0 ;
        }
        mark[h] = 1;
        while(sz(pq)){
            int v = pq.top().S ;pq.pop();
            if(mark[v] == 1)continue;
            mark[v] = 1; 
            for(auto a : G[v]){
                if(a.F == h)continue ;
                if(dis[a.F][i] > dis[v][i]+a.S){
                    dis[a.F][i] = dis[v][i] + a.S ;
                    pq.push({-dis[a.F][i] , a.F});
                }
            }        
        }
        rep(j , 0 , n-1){
            rep(z ,0 , sz(G[j])-1){
                G[j][z].S /= 2.00000000 ;
            }
        }
        rep(j , 0 , n-1){
            if(j == 0 || (t[j] == 0 && is[j] == 1 && is2[j] == 1)){
                ans = min(ans , dis[j][i]) ;
            }
        }
        rep(j , 0 , n-1){
            if(t[j]==2){
                for(auto x : G[j]){
                    dis[x.F][i+1] = min(dis[j][i] + x.S , dis[x.F][i+1]) ;
                }
            }
        }
    }
    return ans ;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 10844 KB Correct.
2 Correct 40 ms 10844 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 200 ms 13136 KB Correct.
2 Correct 238 ms 13188 KB Correct.
3 Correct 233 ms 13144 KB Correct.
4 Correct 280 ms 13184 KB Correct.
5 Correct 239 ms 13184 KB Correct.
6 Correct 287 ms 27660 KB Correct.
7 Correct 360 ms 27336 KB Correct.
8 Correct 179 ms 45708 KB Correct.
9 Correct 161 ms 10936 KB Correct.
10 Correct 162 ms 10932 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 243 ms 13648 KB Correct.
2 Correct 231 ms 13172 KB Correct.
3 Correct 216 ms 13276 KB Correct.
4 Correct 169 ms 10928 KB Correct.
5 Correct 168 ms 10932 KB Correct.
6 Correct 61 ms 24532 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 862 ms 114552 KB Correct.
2 Correct 435 ms 13172 KB Correct.
3 Correct 395 ms 13096 KB Correct.
4 Correct 406 ms 13140 KB Correct.
5 Correct 266 ms 10844 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 107 ms 13368 KB Correct.
2 Correct 114 ms 13396 KB Correct.
3 Correct 120 ms 13428 KB Correct.
4 Correct 192 ms 27672 KB Correct.
5 Correct 79 ms 10952 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 139 ms 13476 KB Correct.
2 Correct 93 ms 13408 KB Correct.
3 Correct 37 ms 18260 KB Correct.
4 Correct 110 ms 21180 KB Correct.
5 Correct 87 ms 10840 KB Correct.
6 Correct 108 ms 13360 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 251 ms 13404 KB Correct.
2 Correct 38 ms 13400 KB Correct.
3 Correct 1186 ms 181528 KB Correct.
4 Correct 697 ms 50884 KB Correct.
5 Correct 1108 ms 82884 KB Correct.
6 Correct 419 ms 38972 KB Correct.
7 Correct 694 ms 52712 KB Correct.
8 Correct 532 ms 17944 KB Correct.
9 Correct 196 ms 13224 KB Correct.
10 Correct 180 ms 13396 KB Correct.
11 Correct 461 ms 13456 KB Correct.
12 Correct 239 ms 13392 KB Correct.
13 Correct 250 ms 13392 KB Correct.
14 Correct 594 ms 94444 KB Correct.
15 Correct 588 ms 34340 KB Correct.
16 Correct 198 ms 13396 KB Correct.
17 Correct 270 ms 13644 KB Correct.
18 Correct 227 ms 13276 KB Correct.
19 Correct 726 ms 13148 KB Correct.
20 Correct 12 ms 10844 KB Correct.
21 Correct 17 ms 10844 KB Correct.
22 Correct 25 ms 14172 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 543 ms 13396 KB Correct.
2 Correct 81 ms 13396 KB Correct.
3 Correct 2978 ms 192196 KB Correct.
4 Correct 772 ms 25300 KB Correct.
5 Correct 2495 ms 84492 KB Correct.
6 Correct 797 ms 40364 KB Correct.
7 Correct 1121 ms 77508 KB Correct.
8 Correct 696 ms 15300 KB Correct.
9 Correct 424 ms 14156 KB Correct.
10 Correct 394 ms 14344 KB Correct.
11 Correct 357 ms 12280 KB Correct.
12 Correct 531 ms 14444 KB Correct.
13 Correct 485 ms 14284 KB Correct.
14 Correct 2320 ms 83500 KB Correct.
15 Correct 2654 ms 101000 KB Correct.
16 Correct 1131 ms 45552 KB Correct.
17 Correct 794 ms 19892 KB Correct.
18 Correct 439 ms 14476 KB Correct.
19 Correct 590 ms 14420 KB Correct.
20 Correct 504 ms 14228 KB Correct.
21 Correct 1586 ms 15268 KB Correct.
22 Correct 22 ms 11012 KB Correct.
23 Correct 35 ms 11112 KB Correct.
24 Correct 49 ms 14168 KB Correct.