답안 #975134

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
975134 2024-05-04T13:27:20 Z ShaShi 사이버랜드 (APIO23_cyberland) C++17
49 / 100
334 ms 81528 KB
#include <bits/stdc++.h>
#include "cyberland.h"
#define pii pair<int, int>
#define pb push_back
#define all(x) x.begin(), x.end()
#define mp make_pair
#define F first
#define S second


using namespace std;

typedef long long ll;


const int MAXN = (int)1e6 + 7;
const int K = 70;
const int MOD = 998244353;
const double INF = (double)1e18 + 7;


int n, m, k, h, tmp, tmp2, tmp3, tmp4, ans, u, v, w;
int arr[MAXN];
double dp[MAXN][K];
bool seen[MAXN], sn[MAXN][K];
vector<pii> adj[MAXN];
vector<int> source;
priority_queue<pair<double, pii>, vector<pair<double, pii> >, greater<pair<double, pii> > > pq;



void DFS(int v) {
    seen[v] = 1;
    
    if (v == 0 || arr[v] == 0) source.pb(v);

    for (auto cur:adj[v]) {
        int u = cur.F, w = cur.S;

        if (!seen[u]) DFS(u);
    }
}


double solve(int N, int M, int kk, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> A) {
    n = N; m = M; k = min(K-1, kk); h = H;

    for (int i=0; i<n; i++) adj[i].clear();
    source.clear();
    fill(seen, seen+n+1, 0);

    for (int j=0; j<K; j++) for (int i=0; i<n; i++) dp[i][j] = INF, sn[i][j] = 0;

    for (int i=0; i<m; i++) {
        u = x[i]; v = y[i]; w = c[i];

        adj[u].pb(mp(v, w));
        adj[v].pb(mp(u, w));
    }

    for (int i=0; i<n; i++) arr[i] = A[i];

    seen[h] = 1;
    DFS(0);

    for (int s:source) {
        dp[s][0] = 0;
        pq.push(mp(0, mp(s, 0)));
    }

    while (pq.size()) {
        auto cur = pq.top().S; pq.pop();

        v = cur.F;
        tmp = cur.S;

        if (sn[v][tmp]) continue;
        sn[v][tmp] = 1;

        if (v == h) continue;


        for (auto cur:adj[v]) {
            int u = cur.F, w = cur.S;

            if (dp[u][tmp] > dp[v][tmp]+w) {
				// cout << "@" << v << " " << tmp << " " << u << " : " << dp[v][tmp]+w << endl;
                dp[u][tmp] = dp[v][tmp]+w;
                pq.push(mp(dp[u][tmp], mp(u, tmp)));
            }

            if (arr[u] == 2 && tmp+1 <= k && dp[u][tmp+1] > (dp[v][tmp]+w)/2.0) {
                dp[u][tmp+1] = (dp[v][tmp]+w)/2.0;

				// cout << "@" << v << " " << tmp << " " << u << " : " << dp[u][tmp+1] << endl;

                pq.push(mp(dp[u][tmp+1], mp(u, tmp+1)));
            }
        }
    }

    double res = INF;

    for (int i=0; i<=k; i++) res = min(res, dp[h][i]);

    return (res == INF? -1 : res);
}

Compilation message

cyberland.cpp: In function 'void DFS(int)':
cyberland.cpp:38:24: warning: unused variable 'w' [-Wunused-variable]
   38 |         int u = cur.F, w = cur.S;
      |                        ^
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 31548 KB Correct.
2 Correct 31 ms 31324 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 31556 KB Correct.
2 Correct 37 ms 31492 KB Correct.
3 Correct 33 ms 31320 KB Correct.
4 Correct 34 ms 31524 KB Correct.
5 Correct 36 ms 31320 KB Correct.
6 Correct 33 ms 36184 KB Correct.
7 Correct 45 ms 36216 KB Correct.
8 Correct 27 ms 45148 KB Correct.
9 Correct 29 ms 31320 KB Correct.
10 Correct 35 ms 31324 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 31508 KB Correct.
2 Correct 36 ms 31536 KB Correct.
3 Correct 32 ms 31580 KB Correct.
4 Correct 31 ms 31324 KB Correct.
5 Correct 32 ms 31468 KB Correct.
6 Correct 14 ms 36116 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 144 ms 72580 KB Correct.
2 Incorrect 142 ms 31580 KB Wrong Answer.
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 31608 KB Correct.
2 Correct 37 ms 31580 KB Correct.
3 Correct 38 ms 31580 KB Correct.
4 Correct 45 ms 36408 KB Correct.
5 Correct 31 ms 31324 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 31556 KB Correct.
2 Correct 28 ms 31580 KB Correct.
3 Correct 87 ms 81528 KB Correct.
4 Correct 26 ms 36284 KB Correct.
5 Correct 34 ms 31440 KB Correct.
6 Correct 33 ms 31576 KB Correct.
# 결과 실행 시간 메모리 Grader output
1 Incorrect 173 ms 31836 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 334 ms 31960 KB Wrong Answer.
2 Halted 0 ms 0 KB -