107012024-04-09 23:15:17111Autó-tortúracpp17Hibás válasz 24/100717ms12584 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1836 KiB
2Elfogadva345ms7256 KiB
subtask20/12
3Elfogadva3ms2536 KiB
4Elfogadva3ms2644 KiB
5Elfogadva3ms2528 KiB
6Elfogadva3ms2472 KiB
7Elfogadva3ms2424 KiB
8Hibás válasz2ms2488 KiB
9Hibás válasz3ms2620 KiB
10Elfogadva3ms2828 KiB
subtask30/18
11Elfogadva3ms2536 KiB
12Elfogadva3ms2644 KiB
13Elfogadva3ms2528 KiB
14Elfogadva3ms2472 KiB
15Elfogadva3ms2424 KiB
16Hibás válasz2ms2488 KiB
17Hibás válasz3ms2620 KiB
18Elfogadva3ms2828 KiB
19Elfogadva4ms3120 KiB
20Elfogadva16ms3800 KiB
21Elfogadva14ms4004 KiB
22Elfogadva14ms4144 KiB
23Elfogadva7ms3836 KiB
24Hibás válasz4ms3744 KiB
25Hibás válasz8ms4128 KiB
26Hibás válasz8ms4136 KiB
27Hibás válasz4ms4076 KiB
subtask40/25
28Elfogadva3ms2536 KiB
29Elfogadva3ms2644 KiB
30Elfogadva3ms2528 KiB
31Elfogadva3ms2472 KiB
32Elfogadva3ms2424 KiB
33Hibás válasz2ms2488 KiB
34Hibás válasz3ms2620 KiB
35Elfogadva3ms2828 KiB
36Elfogadva35ms4464 KiB
37Elfogadva32ms4608 KiB
38Elfogadva35ms4904 KiB
39Elfogadva24ms4632 KiB
40Elfogadva14ms4452 KiB
41Elfogadva7ms4388 KiB
42Hibás válasz32ms4928 KiB
43Elfogadva25ms4712 KiB
44Hibás válasz25ms4712 KiB
45Hibás válasz13ms4656 KiB
subtask524/24
46Elfogadva416ms4628 KiB
47Elfogadva365ms4620 KiB
48Elfogadva404ms4716 KiB
49Elfogadva374ms4588 KiB
50Elfogadva238ms4452 KiB
51Elfogadva411ms4712 KiB
52Elfogadva360ms4708 KiB
53Elfogadva400ms4804 KiB
54Elfogadva368ms4804 KiB
55Elfogadva233ms4812 KiB
subtask60/21
56Elfogadva3ms2536 KiB
57Elfogadva3ms2644 KiB
58Elfogadva3ms2528 KiB
59Elfogadva3ms2472 KiB
60Elfogadva3ms2424 KiB
61Hibás válasz2ms2488 KiB
62Hibás válasz3ms2620 KiB
63Elfogadva3ms2828 KiB
64Elfogadva4ms3120 KiB
65Elfogadva16ms3800 KiB
66Elfogadva14ms4004 KiB
67Elfogadva14ms4144 KiB
68Elfogadva7ms3836 KiB
69Hibás válasz4ms3744 KiB
70Hibás válasz8ms4128 KiB
71Hibás válasz8ms4136 KiB
72Hibás válasz4ms4076 KiB
73Elfogadva35ms4464 KiB
74Elfogadva32ms4608 KiB
75Elfogadva35ms4904 KiB
76Elfogadva24ms4632 KiB
77Elfogadva14ms4452 KiB
78Elfogadva7ms4388 KiB
79Hibás válasz32ms4928 KiB
80Elfogadva25ms4712 KiB
81Hibás válasz25ms4712 KiB
82Hibás válasz13ms4656 KiB
83Elfogadva416ms4628 KiB
84Elfogadva365ms4620 KiB
85Elfogadva404ms4716 KiB
86Elfogadva374ms4588 KiB
87Elfogadva238ms4452 KiB
88Elfogadva411ms4712 KiB
89Elfogadva360ms4708 KiB
90Elfogadva400ms4804 KiB
91Elfogadva368ms4804 KiB
92Elfogadva233ms4812 KiB
93Elfogadva111ms6244 KiB
94Hibás válasz98ms6344 KiB
95Hibás válasz127ms6300 KiB
96Hibás válasz133ms6348 KiB
97Hibás válasz29ms5912 KiB
98Elfogadva111ms7192 KiB
99Elfogadva97ms6016 KiB
100Elfogadva685ms12304 KiB
101Elfogadva717ms12352 KiB
102Elfogadva662ms12172 KiB
103Elfogadva578ms12148 KiB
104Elfogadva460ms12260 KiB
105Elfogadva612ms12280 KiB
106Elfogadva591ms12284 KiB
107Elfogadva558ms12204 KiB
108Elfogadva676ms12584 KiB
109Elfogadva140ms4932 KiB
110Elfogadva361ms7584 KiB
111Elfogadva412ms4996 KiB
112Elfogadva328ms5272 KiB
113Elfogadva351ms5096 KiB
114Hibás válasz587ms12536 KiB
115Hibás válasz87ms5960 KiB
116Hibás válasz90ms6072 KiB
117Hibás válasz361ms12120 KiB
118Hibás válasz109ms11988 KiB