Submission #863877

#TimeUsernameProblemLanguageResultExecution timeMemory
863877TAhmed33From Hacks to Snitches (BOI21_watchmen)C++98
5 / 100
3074 ms105720 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e16; 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] = inf; } } 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 (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] || (j == arr[k[1]] && k[2] == 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({k[0] + 1, (k[1] + 1) % l, j}); } } } int mn = inf; for (int i = 0; i < l; i++) { mn = min(mn, dist[n][i]); } if (mn >= inf) 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...