10701 2024. 04. 09 23:15:17 111 Autó-tortúra cpp17 Hibás válasz 24/100 717ms 12584 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

#define INF (int)1e16

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
#ifdef CB
	freopen("be2.txt","r",stdin);
//	freopen("ki.txt","w",stdout);
#endif
	int N,M,K;
	cin>>N>>M>>K;
	vector<vector<int>>g(N+1);
	for(int i=0;i<M;i++){
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	int L;
	cin>>L;
	vector<int>l(L);
	for(int i=0;i<L;i++){
		cin>>l[i];
	}
	int B;
	cin>>B;
	vector<int>b(B);
	for(int i=0;i<B;i++){
		cin>>b[i];
	}
	vector<vector<int>>x(B,vector<int>(L,INF));
	vector<vector<int>>y(B,vector<int>(B,INF));
	for(int i=0;i<B;i++){
		deque<int>q;
		vector<int>d(N+1,INF);
		d[b[i]]=0;
		q.push_back(b[i]);
		while(!q.empty()){
			int i=q.front();
			q.pop_front();
			for(int j:g[i]){
				if(d[i]+1<d[j]){
					d[j]=d[i]+1;
					q.push_back(j);
				}
			}
		}
		for(int j=0;j<L;j++){
			if(d[l[j]]<=K){
				x[i][j]=d[l[j]];
			}
		}
		for(int j=0;j<B;j++){
			if(d[b[j]]<=K){
				y[i][j]=d[b[j]];
			}
		}
	}
	for(int i=0;i<B;i++){
		for(int j=0;j<B;j++){
			for(int k=0;k<B;k++){
				y[j][k]=min(y[j][k],y[j][i]+y[i][k]);
			}
		}
	}
	vector<int>a(K+2);
	a[K+1]=INF;
	for(int i=1;i<L;i++){
		vector<int>b(K+2,INF);
		deque<int>q;
		vector<int>d(N+1,INF);
		d[l[i-1]]=0;
		q.push_back(l[i-1]);
		while(!q.empty()){
			int i=q.front();
			q.pop_front();
			for(int j:g[i]){
				if(d[i]+1<d[j]){
					d[j]=d[i]+1;
					q.push_back(j);
				}
			}
		}
		int dl=d[l[i]];
		for(int j=0;j+dl<=K;j++){
			b[j]=min(b[j],a[j+dl]+dl);
		}
		for(int k=0;k<B;k++){
			int j=K-x[k][i];
			if(j<0){
				continue;
			}
			if(x[k][i-1]<=K){
				b[j]=min(b[j],a[x[k][i-1]]+x[k][i-1]+x[k][i]);
			}
			for(int kk=0;kk<B;kk++){
				int jj=K-x[kk][i];
				if(jj<0){
					continue;
				}
				if(x[k][i-1]<=K){
					b[min(j,jj)]=min(b[min(j,jj)],a[x[k][i-1]]+x[k][i-1]+x[kk][i]+y[k][kk]);
				}
			}
		}
		for(int j=K-1;j>=0;j--){
			b[j]=min(b[j],b[j+1]);
		}
		a=b;
	}
	cout<<(a[0]==INF?-1:a[0])<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1836 KiB
2 Elfogadva 345ms 7256 KiB
subtask2 0/12
3 Elfogadva 3ms 2536 KiB
4 Elfogadva 3ms 2644 KiB
5 Elfogadva 3ms 2528 KiB
6 Elfogadva 3ms 2472 KiB
7 Elfogadva 3ms 2424 KiB
8 Hibás válasz 2ms 2488 KiB
9 Hibás válasz 3ms 2620 KiB
10 Elfogadva 3ms 2828 KiB
subtask3 0/18
11 Elfogadva 3ms 2536 KiB
12 Elfogadva 3ms 2644 KiB
13 Elfogadva 3ms 2528 KiB
14 Elfogadva 3ms 2472 KiB
15 Elfogadva 3ms 2424 KiB
16 Hibás válasz 2ms 2488 KiB
17 Hibás válasz 3ms 2620 KiB
18 Elfogadva 3ms 2828 KiB
19 Elfogadva 4ms 3120 KiB
20 Elfogadva 16ms 3800 KiB
21 Elfogadva 14ms 4004 KiB
22 Elfogadva 14ms 4144 KiB
23 Elfogadva 7ms 3836 KiB
24 Hibás válasz 4ms 3744 KiB
25 Hibás válasz 8ms 4128 KiB
26 Hibás válasz 8ms 4136 KiB
27 Hibás válasz 4ms 4076 KiB
subtask4 0/25
28 Elfogadva 3ms 2536 KiB
29 Elfogadva 3ms 2644 KiB
30 Elfogadva 3ms 2528 KiB
31 Elfogadva 3ms 2472 KiB
32 Elfogadva 3ms 2424 KiB
33 Hibás válasz 2ms 2488 KiB
34 Hibás válasz 3ms 2620 KiB
35 Elfogadva 3ms 2828 KiB
36 Elfogadva 35ms 4464 KiB
37 Elfogadva 32ms 4608 KiB
38 Elfogadva 35ms 4904 KiB
39 Elfogadva 24ms 4632 KiB
40 Elfogadva 14ms 4452 KiB
41 Elfogadva 7ms 4388 KiB
42 Hibás válasz 32ms 4928 KiB
43 Elfogadva 25ms 4712 KiB
44 Hibás válasz 25ms 4712 KiB
45 Hibás válasz 13ms 4656 KiB
subtask5 24/24
46 Elfogadva 416ms 4628 KiB
47 Elfogadva 365ms 4620 KiB
48 Elfogadva 404ms 4716 KiB
49 Elfogadva 374ms 4588 KiB
50 Elfogadva 238ms 4452 KiB
51 Elfogadva 411ms 4712 KiB
52 Elfogadva 360ms 4708 KiB
53 Elfogadva 400ms 4804 KiB
54 Elfogadva 368ms 4804 KiB
55 Elfogadva 233ms 4812 KiB
subtask6 0/21
56 Elfogadva 3ms 2536 KiB
57 Elfogadva 3ms 2644 KiB
58 Elfogadva 3ms 2528 KiB
59 Elfogadva 3ms 2472 KiB
60 Elfogadva 3ms 2424 KiB
61 Hibás válasz 2ms 2488 KiB
62 Hibás válasz 3ms 2620 KiB
63 Elfogadva 3ms 2828 KiB
64 Elfogadva 4ms 3120 KiB
65 Elfogadva 16ms 3800 KiB
66 Elfogadva 14ms 4004 KiB
67 Elfogadva 14ms 4144 KiB
68 Elfogadva 7ms 3836 KiB
69 Hibás válasz 4ms 3744 KiB
70 Hibás válasz 8ms 4128 KiB
71 Hibás válasz 8ms 4136 KiB
72 Hibás válasz 4ms 4076 KiB
73 Elfogadva 35ms 4464 KiB
74 Elfogadva 32ms 4608 KiB
75 Elfogadva 35ms 4904 KiB
76 Elfogadva 24ms 4632 KiB
77 Elfogadva 14ms 4452 KiB
78 Elfogadva 7ms 4388 KiB
79 Hibás válasz 32ms 4928 KiB
80 Elfogadva 25ms 4712 KiB
81 Hibás válasz 25ms 4712 KiB
82 Hibás válasz 13ms 4656 KiB
83 Elfogadva 416ms 4628 KiB
84 Elfogadva 365ms 4620 KiB
85 Elfogadva 404ms 4716 KiB
86 Elfogadva 374ms 4588 KiB
87 Elfogadva 238ms 4452 KiB
88 Elfogadva 411ms 4712 KiB
89 Elfogadva 360ms 4708 KiB
90 Elfogadva 400ms 4804 KiB
91 Elfogadva 368ms 4804 KiB
92 Elfogadva 233ms 4812 KiB
93 Elfogadva 111ms 6244 KiB
94 Hibás válasz 98ms 6344 KiB
95 Hibás válasz 127ms 6300 KiB
96 Hibás válasz 133ms 6348 KiB
97 Hibás válasz 29ms 5912 KiB
98 Elfogadva 111ms 7192 KiB
99 Elfogadva 97ms 6016 KiB
100 Elfogadva 685ms 12304 KiB
101 Elfogadva 717ms 12352 KiB
102 Elfogadva 662ms 12172 KiB
103 Elfogadva 578ms 12148 KiB
104 Elfogadva 460ms 12260 KiB
105 Elfogadva 612ms 12280 KiB
106 Elfogadva 591ms 12284 KiB
107 Elfogadva 558ms 12204 KiB
108 Elfogadva 676ms 12584 KiB
109 Elfogadva 140ms 4932 KiB
110 Elfogadva 361ms 7584 KiB
111 Elfogadva 412ms 4996 KiB
112 Elfogadva 328ms 5272 KiB
113 Elfogadva 351ms 5096 KiB
114 Hibás válasz 587ms 12536 KiB
115 Hibás válasz 87ms 5960 KiB
116 Hibás válasz 90ms 6072 KiB
117 Hibás válasz 361ms 12120 KiB
118 Hibás válasz 109ms 11988 KiB