Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- vector<int> edge[1001];
- bool visited[1001];
- int BFS(int s, int t){
- queue<pair<int, int>> q;
- q.push({s, 0});
- memset(visited, false, sizeof(visited));
- while(!q.empty()){
- int u = q.front().first, u_len = q.front().second;
- visited[u] = true;
- if(u == t)
- return u_len;
- q.pop();
- for(int i : edge[u])
- if(!visited[i])
- q.push({i, u_len + 1});
- }
- }
- int main(){
- {
- freopen("TOUR.INP", "r", stdin);
- freopen("TOUR.OUT", "w", stdout);
- } //file
- int n, k, m, result = 0;
- {
- cin >> n >> k >> m;
- }
- vector<int> stop(k + 2);
- {
- for(int i = 0; i <= k; ++i)
- cin >> stop[i];
- stop[k + 1] = stop[0];
- }
- {
- int u, v;
- for(int i = 0; i < m; ++i)
- cin >> u >> v,
- edge[u].push_back(v),
- edge[v].push_back(u);
- }
- {
- for(int i = 0; i <= k; ++i)
- result += BFS(stop[i], stop[i + 1]);
- cout << result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement