109692024-04-22 17:56:40k_balintAutó-tortúracpp17Elfogadva 100/100949ms217200 KiB
#include <bits/stdc++.h>
using namespace std;
const int c=3005;
const int inf = 1e8;

int n,K,m,l,b;

vector<int> adj[c];

int dist[c][c];
int distb[c][c];
int arr[c];
int brr[c];
int dp[c][c];

void bfs(int v){
    dist[v][v]=0;
    queue<int> q;
    q.push(v);

    while(!q.empty()){
        int cur=q.front();
        q.pop();

        for(int x:adj[cur]){
            if(dist[v][x]==inf){
                dist[v][x]=dist[v][cur]+1;
                q.push(x);
            }
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin>>n>>m>>K;

    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j) dist[i][j]=0, distb[i][j]=0;
            else dist[i][j]=inf, distb[i][j]=inf;
        }
    }

    for(int i=1;i<=m;i++){
        int a,b; cin>>a>>b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    cin>>l;
    for(int i=1;i<=l;i++) cin>>brr[i];
    cin>>b;
    for(int i=1;i<=b;i++) cin>>arr[i];

    for(int i=1;i<=n;i++) bfs(i);

    for(int i=1;i<=b;i++){
        for(int j=1;j<=b;j++){
            distb[arr[i]][arr[j]]=dist[arr[i]][arr[j]]>K?inf:dist[arr[i]][arr[j]];
        }
    }

    for(int k=1;k<=b;k++){
        for(int i=1;i<=b;i++){
            for(int j=1;j<=b;j++){
                int a=arr[i],b=arr[j],v=arr[k];
                if(distb[a][v] < inf && distb[v][b] < inf){
                    distb[a][b]=min(distb[a][v]+distb[v][b], distb[a][b]);
                }
            }
        }
    }

    for(int i=1;i<l;i++){
        for(int j=0;j<=K;j++) dp[i+1][j]=inf;
        int u=brr[i], v=brr[i+1];

        for(int j=1; j<=b;j++){
            for(int k=1;k<=b;k++){
                int a=arr[j],b=arr[k];
                if(dist[b][v]>K || dist[u][a]>K) continue;
                dp[i+1][K-dist[b][v]] = min(dp[i+1][K-dist[b][v]], dp[i][dist[u][a]] + dist[u][a] + distb[a][b] + dist[b][v]);
            }
        }

        for(int j=K;j>=dist[u][v];j--){
            dp[i+1][j-dist[u][v]]=min(dp[i+1][j-dist[u][v]], dp[i][j]+dist[u][v]);
        }

        for(int j=K-1;j>=0;j--){
            dp[i+1][j]=min(dp[i+1][j],dp[i+1][j+1]);
        }
    }

    if(dp[l][0]>=inf) cout << -1 << endl;
    else cout << dp[l][0] << endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2084 KiB
2Elfogadva476ms134368 KiB
subtask212/12
3Elfogadva3ms2648 KiB
4Elfogadva3ms2896 KiB
5Elfogadva3ms3108 KiB
6Elfogadva3ms3536 KiB
7Elfogadva3ms3264 KiB
8Elfogadva3ms3452 KiB
9Elfogadva3ms3440 KiB
10Elfogadva3ms3588 KiB
subtask318/18
11Elfogadva3ms2648 KiB
12Elfogadva3ms2896 KiB
13Elfogadva3ms3108 KiB
14Elfogadva3ms3536 KiB
15Elfogadva3ms3264 KiB
16Elfogadva3ms3452 KiB
17Elfogadva3ms3440 KiB
18Elfogadva3ms3588 KiB
19Elfogadva4ms6096 KiB
20Elfogadva23ms11248 KiB
21Elfogadva20ms11332 KiB
22Elfogadva21ms11436 KiB
23Elfogadva9ms11528 KiB
24Elfogadva9ms9388 KiB
25Elfogadva17ms11332 KiB
26Elfogadva14ms11428 KiB
27Elfogadva9ms11408 KiB
subtask425/25
28Elfogadva3ms2648 KiB
29Elfogadva3ms2896 KiB
30Elfogadva3ms3108 KiB
31Elfogadva3ms3536 KiB
32Elfogadva3ms3264 KiB
33Elfogadva3ms3452 KiB
34Elfogadva3ms3440 KiB
35Elfogadva3ms3588 KiB
36Elfogadva495ms146008 KiB
37Elfogadva435ms146072 KiB
38Elfogadva476ms146072 KiB
39Elfogadva481ms146180 KiB
40Elfogadva421ms146172 KiB
41Elfogadva405ms146168 KiB
42Elfogadva453ms146184 KiB
43Elfogadva314ms146156 KiB
44Elfogadva328ms146188 KiB
45Elfogadva155ms146188 KiB
subtask524/24
46Elfogadva499ms181828 KiB
47Elfogadva437ms181880 KiB
48Elfogadva495ms181932 KiB
49Elfogadva446ms181828 KiB
50Elfogadva319ms182092 KiB
51Elfogadva493ms175080 KiB
52Elfogadva430ms175268 KiB
53Elfogadva490ms175136 KiB
54Elfogadva439ms175084 KiB
55Elfogadva293ms175092 KiB
subtask621/21
56Elfogadva3ms2648 KiB
57Elfogadva3ms2896 KiB
58Elfogadva3ms3108 KiB
59Elfogadva3ms3536 KiB
60Elfogadva3ms3264 KiB
61Elfogadva3ms3452 KiB
62Elfogadva3ms3440 KiB
63Elfogadva3ms3588 KiB
64Elfogadva4ms6096 KiB
65Elfogadva23ms11248 KiB
66Elfogadva20ms11332 KiB
67Elfogadva21ms11436 KiB
68Elfogadva9ms11528 KiB
69Elfogadva9ms9388 KiB
70Elfogadva17ms11332 KiB
71Elfogadva14ms11428 KiB
72Elfogadva9ms11408 KiB
73Elfogadva495ms146008 KiB
74Elfogadva435ms146072 KiB
75Elfogadva476ms146072 KiB
76Elfogadva481ms146180 KiB
77Elfogadva421ms146172 KiB
78Elfogadva405ms146168 KiB
79Elfogadva453ms146184 KiB
80Elfogadva314ms146156 KiB
81Elfogadva328ms146188 KiB
82Elfogadva155ms146188 KiB
83Elfogadva499ms181828 KiB
84Elfogadva437ms181880 KiB
85Elfogadva495ms181932 KiB
86Elfogadva446ms181828 KiB
87Elfogadva319ms182092 KiB
88Elfogadva493ms175080 KiB
89Elfogadva430ms175268 KiB
90Elfogadva490ms175136 KiB
91Elfogadva439ms175084 KiB
92Elfogadva293ms175092 KiB
93Elfogadva421ms152464 KiB
94Elfogadva389ms151036 KiB
95Elfogadva497ms151108 KiB
96Elfogadva554ms150748 KiB
97Elfogadva168ms150796 KiB
98Elfogadva149ms49172 KiB
99Elfogadva518ms152752 KiB
100Elfogadva904ms205860 KiB
101Elfogadva949ms217040 KiB
102Elfogadva843ms172972 KiB
103Elfogadva815ms217004 KiB
104Elfogadva643ms217016 KiB
105Elfogadva802ms217020 KiB
106Elfogadva788ms217056 KiB
107Elfogadva795ms217020 KiB
108Elfogadva875ms217068 KiB
109Elfogadva229ms216988 KiB
110Elfogadva442ms217180 KiB
111Elfogadva505ms217200 KiB
112Elfogadva416ms217160 KiB
113Elfogadva418ms217036 KiB
114Elfogadva782ms171960 KiB
115Elfogadva493ms149276 KiB
116Elfogadva507ms149308 KiB
117Elfogadva569ms171640 KiB
118Elfogadva250ms171160 KiB