160632025-03-30 11:03:17szilAutó-tortúracpp17Időlimit túllépés 30/1001.605s71008 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);
            }
        }

        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;
    }

    ll ans = *min_element(dp_last.begin(), dp_last.end());
    cout << (ans >= INF ? -1 : ans) << "\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.58s47924 KiB
subtask212/12
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms508 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
subtask318/18
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms508 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms316 KiB
19Elfogadva4ms820 KiB
20Elfogadva34ms2028 KiB
21Elfogadva34ms1932 KiB
22Elfogadva35ms1928 KiB
23Elfogadva25ms1948 KiB
24Elfogadva24ms1904 KiB
25Elfogadva37ms1844 KiB
26Elfogadva34ms2036 KiB
27Elfogadva27ms1884 KiB
subtask40/25
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms508 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva1ms316 KiB
36Időlimit túllépés1.598s70880 KiB
37Időlimit túllépés1.598s70708 KiB
38Időlimit túllépés1.6s70908 KiB
39Időlimit túllépés1.6s70852 KiB
40Időlimit túllépés1.585s70772 KiB
41Időlimit túllépés1.585s70708 KiB
42Időlimit túllépés1.585s70700 KiB
43Időlimit túllépés1.588s70712 KiB
44Időlimit túllépés1.59s70708 KiB
45Időlimit túllépés1.59s70756 KiB
subtask50/24
46Időlimit túllépés1.587s70708 KiB
47Időlimit túllépés1.588s70708 KiB
48Időlimit túllépés1.588s70760 KiB
49Időlimit túllépés1.588s70708 KiB
50Időlimit túllépés1.595s70732 KiB
51Időlimit túllépés1.595s70708 KiB
52Időlimit túllépés1.595s70708 KiB
53Időlimit túllépés1.595s70724 KiB
54Időlimit túllépés1.587s70800 KiB
55Időlimit túllépés1.585s70724 KiB
subtask60/21
56Elfogadva1ms316 KiB
57Elfogadva1ms316 KiB
58Elfogadva1ms508 KiB
59Elfogadva1ms316 KiB
60Elfogadva1ms316 KiB
61Elfogadva1ms316 KiB
62Elfogadva1ms316 KiB
63Elfogadva1ms316 KiB
64Elfogadva4ms820 KiB
65Elfogadva34ms2028 KiB
66Elfogadva34ms1932 KiB
67Elfogadva35ms1928 KiB
68Elfogadva25ms1948 KiB
69Elfogadva24ms1904 KiB
70Elfogadva37ms1844 KiB
71Elfogadva34ms2036 KiB
72Elfogadva27ms1884 KiB
73Időlimit túllépés1.598s70880 KiB
74Időlimit túllépés1.598s70708 KiB
75Időlimit túllépés1.6s70908 KiB
76Időlimit túllépés1.6s70852 KiB
77Időlimit túllépés1.585s70772 KiB
78Időlimit túllépés1.585s70708 KiB
79Időlimit túllépés1.585s70700 KiB
80Időlimit túllépés1.588s70712 KiB
81Időlimit túllépés1.59s70708 KiB
82Időlimit túllépés1.59s70756 KiB
83Időlimit túllépés1.587s70708 KiB
84Időlimit túllépés1.588s70708 KiB
85Időlimit túllépés1.588s70760 KiB
86Időlimit túllépés1.588s70708 KiB
87Időlimit túllépés1.595s70732 KiB
88Időlimit túllépés1.595s70708 KiB
89Időlimit túllépés1.595s70708 KiB
90Időlimit túllépés1.595s70724 KiB
91Időlimit túllépés1.587s70800 KiB
92Időlimit túllépés1.585s70724 KiB
93Időlimit túllépés1.593s71008 KiB
94Időlimit túllépés1.595s70708 KiB
95Időlimit túllépés1.593s70900 KiB
96Időlimit túllépés1.595s70708 KiB
97Időlimit túllépés1.588s70876 KiB
98Időlimit túllépés1.585s12084 KiB
99Időlimit túllépés1.588s70708 KiB
100Időlimit túllépés1.59s70724 KiB
101Időlimit túllépés1.593s70708 KiB
102Időlimit túllépés1.605s70772 KiB
103Időlimit túllépés1.605s70860 KiB
104Időlimit túllépés1.605s70820 KiB
105Időlimit túllépés1.585s70708 KiB
106Időlimit túllépés1.605s70644 KiB
107Időlimit túllépés1.605s70732 KiB
108Időlimit túllépés1.605s70732 KiB
109Időlimit túllépés1.587s70828 KiB
110Időlimit túllépés1.605s70808 KiB
111Időlimit túllépés1.603s70736 KiB
112Időlimit túllépés1.605s70708 KiB
113Időlimit túllépés1.588s70696 KiB
114Időlimit túllépés1.605s70756 KiB
115Időlimit túllépés1.605s70752 KiB
116Időlimit túllépés1.605s70708 KiB
117Időlimit túllépés1.59s70708 KiB
118Időlimit túllépés1.598s70792 KiB