160612025-03-30 10:55:50szilAutó-tortúracpp17Időlimit túllépés 0/1001.606s71160 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 3001;
const int MAXB = 151;
const int INF = 1e9;

ll dist[MAXN][MAXN], bdist[MAXB][MAXB];

void solve() {
    int n, m, k; cin >> n >> m >> k;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            bdist[i][j] = dist[i][j] = INF;

        }
        bdist[i][i] = dist[i][i] = 0;
    }
    for (int i = 0; i < m; i++) {
        int a, b; cin >> a >> b;
        dist[a][b] = dist[b][a] = 1;
    }
    for (int c = 1; c <= n; c++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                dist[i][j] = min(dist[i][j], dist[i][c] + dist[c][j]);
            }
        }
    }
    int l; cin >> l;
    vector<int> terv(l+1);
    for (int i = 1; i <= l; i++) cin >> terv[i];
    int b; cin >> b;
    vector<int> ben(b+1);
    for (int i = 1; i <= b; i++) cin >> ben[i];

    for (int i = 1; i <= b; i++) {
        for (int j = 1; j <= b; j++) {
            int u = ben[i];
            int v = ben[j];

            if (dist[u][v] <= k) {
                bdist[i][j] = min(bdist[i][j], dist[u][v]);
            }
        }
    }

    for (int c = 1; c <= b; c++) {
        for (int i = 1; i <= b; i++) {
            for (int j = 1; j <= b; j++) {
                bdist[i][j] = min(bdist[i][j], bdist[i][c] + bdist[c][j]);
            }
        }
    }

    vector<ll> dp_last(k+1);
    for (int a = 2; a <= l; a++) {
        vector<ll> dp_curr(k+1, INF);

        int start = terv[a-1];
        int goal = terv[a];

        for (int i = 1; i <= b; i++) {
            for (int j = 1; j <= b; j++) {
                ll d = dist[start][ben[i]] + bdist[i][j] + dist[ben[j]][goal];
                ll need = dist[start][ben[i]];
                ll left = k - dist[ben[j]][goal];

                
                if (need > k) continue;
                if (left < 0) continue;

                d += dp_last[need];
                dp_curr[left] = min(dp_curr[left], d);
            }
        }

        if (dist[start][goal] <= k) {
            for (int i = 0; i <= k - dist[start][goal]; i++) {
                dp_curr[i] = min(dp_curr[i], dist[start][goal] + dp_last[i + dist[start][goal]]);
            }
        }

        for (int i = k-1; i >= 0; i--) {
            dp_curr[i] = min(dp_curr[i], dp_curr[i+1]);
        }

        dp_last = dp_curr;
    }

    cout << (*min_element(dp_last.begin(), dp_last.end())) << "\n";
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1; 
    // cin >> t;
    while (t--) solve();
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Időlimit túllépés1.588s48276 KiB
subtask20/12
3Hibás válasz1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms524 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Hibás válasz2ms316 KiB
subtask30/18
11Hibás válasz1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms524 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms316 KiB
18Hibás válasz2ms316 KiB
19Elfogadva4ms820 KiB
20Hibás válasz32ms2200 KiB
21Elfogadva32ms2100 KiB
22Hibás válasz32ms2088 KiB
23Hibás válasz28ms2200 KiB
24Hibás válasz24ms2100 KiB
25Hibás válasz35ms2200 KiB
26Hibás válasz32ms2100 KiB
27Hibás válasz26ms2100 KiB
subtask40/25
28Hibás válasz1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms524 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Hibás válasz2ms316 KiB
36Időlimit túllépés1.59s71160 KiB
37Időlimit túllépés1.59s70964 KiB
38Időlimit túllépés1.59s70964 KiB
39Időlimit túllépés1.59s70972 KiB
40Időlimit túllépés1.58s70984 KiB
41Időlimit túllépés1.582s70968 KiB
42Időlimit túllépés1.582s70936 KiB
43Időlimit túllépés1.582s71148 KiB
44Időlimit túllépés1.585s70888 KiB
45Időlimit túllépés1.585s70964 KiB
subtask50/24
46Időlimit túllépés1.588s70964 KiB
47Időlimit túllépés1.59s70964 KiB
48Időlimit túllépés1.59s70964 KiB
49Időlimit túllépés1.588s70976 KiB
50Időlimit túllépés1.595s70984 KiB
51Időlimit túllépés1.595s70988 KiB
52Időlimit túllépés1.595s71016 KiB
53Időlimit túllépés1.595s70964 KiB
54Időlimit túllépés1.59s70964 KiB
55Időlimit túllépés1.59s70996 KiB
subtask60/21
56Hibás válasz1ms316 KiB
57Elfogadva1ms316 KiB
58Elfogadva1ms316 KiB
59Elfogadva1ms316 KiB
60Elfogadva1ms524 KiB
61Elfogadva1ms316 KiB
62Elfogadva1ms316 KiB
63Hibás válasz2ms316 KiB
64Elfogadva4ms820 KiB
65Hibás válasz32ms2200 KiB
66Elfogadva32ms2100 KiB
67Hibás válasz32ms2088 KiB
68Hibás válasz28ms2200 KiB
69Hibás válasz24ms2100 KiB
70Hibás válasz35ms2200 KiB
71Hibás válasz32ms2100 KiB
72Hibás válasz26ms2100 KiB
73Időlimit túllépés1.59s71160 KiB
74Időlimit túllépés1.59s70964 KiB
75Időlimit túllépés1.59s70964 KiB
76Időlimit túllépés1.59s70972 KiB
77Időlimit túllépés1.58s70984 KiB
78Időlimit túllépés1.582s70968 KiB
79Időlimit túllépés1.582s70936 KiB
80Időlimit túllépés1.582s71148 KiB
81Időlimit túllépés1.585s70888 KiB
82Időlimit túllépés1.585s70964 KiB
83Időlimit túllépés1.588s70964 KiB
84Időlimit túllépés1.59s70964 KiB
85Időlimit túllépés1.59s70964 KiB
86Időlimit túllépés1.588s70976 KiB
87Időlimit túllépés1.595s70984 KiB
88Időlimit túllépés1.595s70988 KiB
89Időlimit túllépés1.595s71016 KiB
90Időlimit túllépés1.595s70964 KiB
91Időlimit túllépés1.59s70964 KiB
92Időlimit túllépés1.59s70996 KiB
93Időlimit túllépés1.588s70908 KiB
94Időlimit túllépés1.59s70964 KiB
95Időlimit túllépés1.588s71076 KiB
96Időlimit túllépés1.588s70988 KiB
97Időlimit túllépés1.592s70956 KiB
98Időlimit túllépés1.588s12856 KiB
99Időlimit túllépés1.593s70964 KiB
100Időlimit túllépés1.593s70924 KiB
101Időlimit túllépés1.588s70900 KiB
102Időlimit túllépés1.605s70872 KiB
103Időlimit túllépés1.605s70980 KiB
104Időlimit túllépés1.605s70964 KiB
105Időlimit túllépés1.597s71000 KiB
106Időlimit túllépés1.605s70964 KiB
107Időlimit túllépés1.605s71044 KiB
108Időlimit túllépés1.605s70964 KiB
109Időlimit túllépés1.59s70964 KiB
110Időlimit túllépés1.605s71012 KiB
111Időlimit túllépés1.605s70860 KiB
112Időlimit túllépés1.605s70908 KiB
113Időlimit túllépés1.578s70960 KiB
114Időlimit túllépés1.606s70980 KiB
115Időlimit túllépés1.605s70892 KiB
116Időlimit túllépés1.605s71076 KiB
117Időlimit túllépés1.588s71080 KiB
118Időlimit túllépés1.582s71016 KiB