109682024-04-22 17:41:54k_balintAutó-tortúracpp17Hibás válasz 24/100921ms217256 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2088 KiB
2Elfogadva449ms134380 KiB
subtask20/12
3Elfogadva3ms2428 KiB
4Elfogadva3ms2704 KiB
5Elfogadva3ms2984 KiB
6Elfogadva3ms3172 KiB
7Elfogadva3ms3440 KiB
8Hibás válasz3ms3656 KiB
9Hibás válasz3ms3868 KiB
10Elfogadva3ms3828 KiB
subtask30/18
11Elfogadva3ms2428 KiB
12Elfogadva3ms2704 KiB
13Elfogadva3ms2984 KiB
14Elfogadva3ms3172 KiB
15Elfogadva3ms3440 KiB
16Hibás válasz3ms3656 KiB
17Hibás válasz3ms3868 KiB
18Elfogadva3ms3828 KiB
19Hibás válasz4ms6344 KiB
20Hibás válasz20ms11416 KiB
21Elfogadva19ms11628 KiB
22Hibás válasz18ms11668 KiB
23Hibás válasz9ms11880 KiB
24Hibás válasz8ms9372 KiB
25Hibás válasz14ms11536 KiB
26Hibás válasz13ms11840 KiB
27Hibás válasz8ms11804 KiB
subtask40/25
28Elfogadva3ms2428 KiB
29Elfogadva3ms2704 KiB
30Elfogadva3ms2984 KiB
31Elfogadva3ms3172 KiB
32Elfogadva3ms3440 KiB
33Hibás válasz3ms3656 KiB
34Hibás válasz3ms3868 KiB
35Elfogadva3ms3828 KiB
36Elfogadva493ms146404 KiB
37Elfogadva428ms146452 KiB
38Elfogadva472ms146536 KiB
39Hibás válasz465ms146536 KiB
40Elfogadva437ms146692 KiB
41Elfogadva391ms146688 KiB
42Hibás válasz448ms146600 KiB
43Hibás válasz305ms146440 KiB
44Hibás válasz305ms146436 KiB
45Hibás válasz146ms146428 KiB
subtask524/24
46Elfogadva486ms182164 KiB
47Elfogadva439ms182164 KiB
48Elfogadva483ms182172 KiB
49Elfogadva451ms182312 KiB
50Elfogadva296ms182412 KiB
51Elfogadva481ms175184 KiB
52Elfogadva432ms175096 KiB
53Elfogadva476ms175080 KiB
54Elfogadva444ms175076 KiB
55Elfogadva291ms175084 KiB
subtask60/21
56Elfogadva3ms2428 KiB
57Elfogadva3ms2704 KiB
58Elfogadva3ms2984 KiB
59Elfogadva3ms3172 KiB
60Elfogadva3ms3440 KiB
61Hibás válasz3ms3656 KiB
62Hibás válasz3ms3868 KiB
63Elfogadva3ms3828 KiB
64Hibás válasz4ms6344 KiB
65Hibás válasz20ms11416 KiB
66Elfogadva19ms11628 KiB
67Hibás válasz18ms11668 KiB
68Hibás válasz9ms11880 KiB
69Hibás válasz8ms9372 KiB
70Hibás válasz14ms11536 KiB
71Hibás válasz13ms11840 KiB
72Hibás válasz8ms11804 KiB
73Elfogadva493ms146404 KiB
74Elfogadva428ms146452 KiB
75Elfogadva472ms146536 KiB
76Hibás válasz465ms146536 KiB
77Elfogadva437ms146692 KiB
78Elfogadva391ms146688 KiB
79Hibás válasz448ms146600 KiB
80Hibás válasz305ms146440 KiB
81Hibás válasz305ms146436 KiB
82Hibás válasz146ms146428 KiB
83Elfogadva486ms182164 KiB
84Elfogadva439ms182164 KiB
85Elfogadva483ms182172 KiB
86Elfogadva451ms182312 KiB
87Elfogadva296ms182412 KiB
88Elfogadva481ms175184 KiB
89Elfogadva432ms175096 KiB
90Elfogadva476ms175080 KiB
91Elfogadva444ms175076 KiB
92Elfogadva291ms175084 KiB
93Hibás válasz397ms152440 KiB
94Hibás válasz400ms151020 KiB
95Hibás válasz495ms150960 KiB
96Hibás válasz532ms150476 KiB
97Hibás válasz178ms150456 KiB
98Hibás válasz136ms48828 KiB
99Elfogadva500ms152448 KiB
100Elfogadva908ms205656 KiB
101Elfogadva913ms216836 KiB
102Elfogadva833ms172784 KiB
103Elfogadva773ms216856 KiB
104Elfogadva629ms216820 KiB
105Hibás válasz777ms216788 KiB
106Hibás válasz764ms216784 KiB
107Hibás válasz746ms216976 KiB
108Hibás válasz921ms217040 KiB
109Elfogadva226ms217144 KiB
110Elfogadva467ms217256 KiB
111Elfogadva493ms217240 KiB
112Elfogadva395ms217232 KiB
113Elfogadva416ms217000 KiB
114Hibás válasz754ms171904 KiB
115Hibás válasz486ms149200 KiB
116Hibás válasz501ms149212 KiB
117Hibás válasz541ms171624 KiB
118Hibás válasz241ms171116 KiB