Submission #863737

#TimeUsernameProblemLanguageResultExecution timeMemory
863737TAhmed33From Hacks to Snitches (BOI21_watchmen)C++98
0 / 100
2085 ms105980 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int dist[100001][126]; int arr[126]; int n; vector <int> adj[100001]; signed main () { ios::sync_with_stdio(0); cin.tie(0); int m; cin >> n >> m; for (int i = 1; i <= m; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } int l; cin >> l >> l; for (int i = 0; i < l; i++) cin >> arr[i]; for (int i = 0; i <= 125; i++) { for (int j = 1; j <= n; j++) { dist[j][i] = 1e9; } } dist[1][0] = 0; priority_queue <vector <int>, vector <vector <int>>, greater <vector <int>>> pq; pq.push({0, 0, 1}); while (!pq.empty()) { auto k = pq.top(); pq.pop(); if (k[0] > dist[k[2]][k[1]]) continue; if (arr[(k[1] + 1) % l] != k[2]) { if (dist[k[2]][(k[1] + 1) % l] > k[0] + 1) { dist[k[2]][(k[1] + 1) % l] = k[0] + 1; pq.push({k[0] + 1, (k[1] + 1) % l, k[2]}); } } for (auto j : adj[k[2]]) { if (j == arr[(k[1] + 1) % l]) continue; if (dist[j][(k[1] + 1) % l] > k[0] + 1) { dist[j][(k[1] + 1) % l] = k[0] + 1; pq.push({dist[j][(k[1] + 1) % l], (k[1] + 1) % l, j}); } } } int mn = 1e9; for (int i = 0; i <= l; i++) { mn = min(mn, dist[n][i]); } if (mn >= 1e9) cout << "impossible\n"; else cout << mn << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...