10968 2024. 04. 22 17:41:54 k_balint Autó-tortúra cpp17 Hibás válasz 24/100 921ms 217256 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[i][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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2088 KiB
2 Elfogadva 449ms 134380 KiB
subtask2 0/12
3 Elfogadva 3ms 2428 KiB
4 Elfogadva 3ms 2704 KiB
5 Elfogadva 3ms 2984 KiB
6 Elfogadva 3ms 3172 KiB
7 Elfogadva 3ms 3440 KiB
8 Hibás válasz 3ms 3656 KiB
9 Hibás válasz 3ms 3868 KiB
10 Elfogadva 3ms 3828 KiB
subtask3 0/18
11 Elfogadva 3ms 2428 KiB
12 Elfogadva 3ms 2704 KiB
13 Elfogadva 3ms 2984 KiB
14 Elfogadva 3ms 3172 KiB
15 Elfogadva 3ms 3440 KiB
16 Hibás válasz 3ms 3656 KiB
17 Hibás válasz 3ms 3868 KiB
18 Elfogadva 3ms 3828 KiB
19 Hibás válasz 4ms 6344 KiB
20 Hibás válasz 20ms 11416 KiB
21 Elfogadva 19ms 11628 KiB
22 Hibás válasz 18ms 11668 KiB
23 Hibás válasz 9ms 11880 KiB
24 Hibás válasz 8ms 9372 KiB
25 Hibás válasz 14ms 11536 KiB
26 Hibás válasz 13ms 11840 KiB
27 Hibás válasz 8ms 11804 KiB
subtask4 0/25
28 Elfogadva 3ms 2428 KiB
29 Elfogadva 3ms 2704 KiB
30 Elfogadva 3ms 2984 KiB
31 Elfogadva 3ms 3172 KiB
32 Elfogadva 3ms 3440 KiB
33 Hibás válasz 3ms 3656 KiB
34 Hibás válasz 3ms 3868 KiB
35 Elfogadva 3ms 3828 KiB
36 Elfogadva 493ms 146404 KiB
37 Elfogadva 428ms 146452 KiB
38 Elfogadva 472ms 146536 KiB
39 Hibás válasz 465ms 146536 KiB
40 Elfogadva 437ms 146692 KiB
41 Elfogadva 391ms 146688 KiB
42 Hibás válasz 448ms 146600 KiB
43 Hibás válasz 305ms 146440 KiB
44 Hibás válasz 305ms 146436 KiB
45 Hibás válasz 146ms 146428 KiB
subtask5 24/24
46 Elfogadva 486ms 182164 KiB
47 Elfogadva 439ms 182164 KiB
48 Elfogadva 483ms 182172 KiB
49 Elfogadva 451ms 182312 KiB
50 Elfogadva 296ms 182412 KiB
51 Elfogadva 481ms 175184 KiB
52 Elfogadva 432ms 175096 KiB
53 Elfogadva 476ms 175080 KiB
54 Elfogadva 444ms 175076 KiB
55 Elfogadva 291ms 175084 KiB
subtask6 0/21
56 Elfogadva 3ms 2428 KiB
57 Elfogadva 3ms 2704 KiB
58 Elfogadva 3ms 2984 KiB
59 Elfogadva 3ms 3172 KiB
60 Elfogadva 3ms 3440 KiB
61 Hibás válasz 3ms 3656 KiB
62 Hibás válasz 3ms 3868 KiB
63 Elfogadva 3ms 3828 KiB
64 Hibás válasz 4ms 6344 KiB
65 Hibás válasz 20ms 11416 KiB
66 Elfogadva 19ms 11628 KiB
67 Hibás válasz 18ms 11668 KiB
68 Hibás válasz 9ms 11880 KiB
69 Hibás válasz 8ms 9372 KiB
70 Hibás válasz 14ms 11536 KiB
71 Hibás válasz 13ms 11840 KiB
72 Hibás válasz 8ms 11804 KiB
73 Elfogadva 493ms 146404 KiB
74 Elfogadva 428ms 146452 KiB
75 Elfogadva 472ms 146536 KiB
76 Hibás válasz 465ms 146536 KiB
77 Elfogadva 437ms 146692 KiB
78 Elfogadva 391ms 146688 KiB
79 Hibás válasz 448ms 146600 KiB
80 Hibás válasz 305ms 146440 KiB
81 Hibás válasz 305ms 146436 KiB
82 Hibás válasz 146ms 146428 KiB
83 Elfogadva 486ms 182164 KiB
84 Elfogadva 439ms 182164 KiB
85 Elfogadva 483ms 182172 KiB
86 Elfogadva 451ms 182312 KiB
87 Elfogadva 296ms 182412 KiB
88 Elfogadva 481ms 175184 KiB
89 Elfogadva 432ms 175096 KiB
90 Elfogadva 476ms 175080 KiB
91 Elfogadva 444ms 175076 KiB
92 Elfogadva 291ms 175084 KiB
93 Hibás válasz 397ms 152440 KiB
94 Hibás válasz 400ms 151020 KiB
95 Hibás válasz 495ms 150960 KiB
96 Hibás válasz 532ms 150476 KiB
97 Hibás válasz 178ms 150456 KiB
98 Hibás válasz 136ms 48828 KiB
99 Elfogadva 500ms 152448 KiB
100 Elfogadva 908ms 205656 KiB
101 Elfogadva 913ms 216836 KiB
102 Elfogadva 833ms 172784 KiB
103 Elfogadva 773ms 216856 KiB
104 Elfogadva 629ms 216820 KiB
105 Hibás válasz 777ms 216788 KiB
106 Hibás válasz 764ms 216784 KiB
107 Hibás válasz 746ms 216976 KiB
108 Hibás válasz 921ms 217040 KiB
109 Elfogadva 226ms 217144 KiB
110 Elfogadva 467ms 217256 KiB
111 Elfogadva 493ms 217240 KiB
112 Elfogadva 395ms 217232 KiB
113 Elfogadva 416ms 217000 KiB
114 Hibás válasz 754ms 171904 KiB
115 Hibás válasz 486ms 149200 KiB
116 Hibás válasz 501ms 149212 KiB
117 Hibás válasz 541ms 171624 KiB
118 Hibás válasz 241ms 171116 KiB