160622025-03-30 11:00:30szilAutó-tortúracpp17Időlimit túllépés 0/1001.605s70900 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 3001;
const int MAXB = 151;
const ll INF = 1e14;

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++) {
            dist[i][j] = INF;
        }
        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++) {
            bdist[i][j] = INF;
        }
        bdist[i][i] = 0;
    }

    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.59s47928 KiB
subtask20/12
3Hibás válasz1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Hibás válasz1ms316 KiB
subtask30/18
11Hibás válasz1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms316 KiB
18Hibás válasz1ms316 KiB
19Elfogadva4ms824 KiB
20Elfogadva34ms1928 KiB
21Elfogadva34ms2036 KiB
22Elfogadva34ms1932 KiB
23Elfogadva25ms1932 KiB
24Elfogadva24ms1936 KiB
25Elfogadva37ms1844 KiB
26Elfogadva34ms1928 KiB
27Elfogadva27ms1928 KiB
subtask40/25
28Hibás válasz1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Hibás válasz1ms316 KiB
36Időlimit túllépés1.587s70704 KiB
37Időlimit túllépés1.587s70900 KiB
38Időlimit túllépés1.587s70752 KiB
39Időlimit túllépés1.587s70900 KiB
40Időlimit túllépés1.582s70708 KiB
41Időlimit túllépés1.582s70712 KiB
42Időlimit túllépés1.58s70828 KiB
43Időlimit túllépés1.582s70856 KiB
44Időlimit túllépés1.587s70708 KiB
45Időlimit túllépés1.587s70736 KiB
subtask50/24
46Időlimit túllépés1.578s70784 KiB
47Időlimit túllépés1.577s70860 KiB
48Időlimit túllépés1.577s70708 KiB
49Időlimit túllépés1.578s70708 KiB
50Időlimit túllépés1.593s70708 KiB
51Időlimit túllépés1.593s70872 KiB
52Időlimit túllépés1.593s70852 KiB
53Időlimit túllépés1.595s70708 KiB
54Időlimit túllépés1.595s70708 KiB
55Időlimit túllépés1.595s70708 KiB
subtask60/21
56Hibás válasz1ms316 KiB
57Elfogadva1ms316 KiB
58Elfogadva1ms316 KiB
59Elfogadva1ms316 KiB
60Elfogadva1ms316 KiB
61Elfogadva1ms316 KiB
62Elfogadva1ms316 KiB
63Hibás válasz1ms316 KiB
64Elfogadva4ms824 KiB
65Elfogadva34ms1928 KiB
66Elfogadva34ms2036 KiB
67Elfogadva34ms1932 KiB
68Elfogadva25ms1932 KiB
69Elfogadva24ms1936 KiB
70Elfogadva37ms1844 KiB
71Elfogadva34ms1928 KiB
72Elfogadva27ms1928 KiB
73Időlimit túllépés1.587s70704 KiB
74Időlimit túllépés1.587s70900 KiB
75Időlimit túllépés1.587s70752 KiB
76Időlimit túllépés1.587s70900 KiB
77Időlimit túllépés1.582s70708 KiB
78Időlimit túllépés1.582s70712 KiB
79Időlimit túllépés1.58s70828 KiB
80Időlimit túllépés1.582s70856 KiB
81Időlimit túllépés1.587s70708 KiB
82Időlimit túllépés1.587s70736 KiB
83Időlimit túllépés1.578s70784 KiB
84Időlimit túllépés1.577s70860 KiB
85Időlimit túllépés1.577s70708 KiB
86Időlimit túllépés1.578s70708 KiB
87Időlimit túllépés1.593s70708 KiB
88Időlimit túllépés1.593s70872 KiB
89Időlimit túllépés1.593s70852 KiB
90Időlimit túllépés1.595s70708 KiB
91Időlimit túllépés1.595s70708 KiB
92Időlimit túllépés1.595s70708 KiB
93Időlimit túllépés1.58s70888 KiB
94Időlimit túllépés1.58s70708 KiB
95Időlimit túllépés1.58s70708 KiB
96Időlimit túllépés1.582s70856 KiB
97Időlimit túllépés1.588s70720 KiB
98Időlimit túllépés1.583s12340 KiB
99Időlimit túllépés1.59s70648 KiB
100Időlimit túllépés1.588s70708 KiB
101Időlimit túllépés1.588s70724 KiB
102Időlimit túllépés1.605s70704 KiB
103Időlimit túllépés1.605s70784 KiB
104Időlimit túllépés1.605s70884 KiB
105Időlimit túllépés1.588s70668 KiB
106Időlimit túllépés1.605s70836 KiB
107Időlimit túllépés1.605s70868 KiB
108Időlimit túllépés1.605s70708 KiB
109Időlimit túllépés1.588s70796 KiB
110Időlimit túllépés1.605s70700 KiB
111Időlimit túllépés1.605s70840 KiB
112Időlimit túllépés1.605s70892 KiB
113Időlimit túllépés1.593s70760 KiB
114Időlimit túllépés1.605s70888 KiB
115Időlimit túllépés1.605s70824 KiB
116Időlimit túllépés1.605s70824 KiB
117Időlimit túllépés1.585s70828 KiB
118Időlimit túllépés1.605s70844 KiB