Advertisement
Guest User

Al

a guest
Feb 24th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("dmin.in");
  7. ofstream fout("dmin.out");
  8.  
  9. class Graph
  10. {
  11. private :
  12.  
  13. int V;
  14. list <int> *adj;
  15.  
  16. public :
  17.  
  18. Graph(int V);
  19. void Add_Edge(int u, int v);
  20. void BFS(int src, vector <int> &D);
  21. };
  22.  
  23. inline Graph::Graph(int V)
  24. {
  25. this->V = V;
  26. adj = new list <int> [V + 1];
  27. }
  28.  
  29. inline void Graph::Add_Edge(int u, int v)
  30. {
  31. adj[u].push_back(v);
  32. adj[v].push_back(u);
  33. }
  34.  
  35. inline void Graph::BFS(int src, vector <int> &D)
  36. {
  37. queue <int> Q;
  38. D[src] = 0;
  39. Q.push(src);
  40.  
  41. while (!Q.empty())
  42. {
  43. int u = Q.front();
  44. Q.pop();
  45.  
  46. for (auto v : adj[u])
  47. if (D[v] == INF)
  48. D[v] = D[u] + 1, Q.push(v);
  49. }
  50. }
  51.  
  52. int n, m, k;
  53.  
  54. int main()
  55. {
  56. fin >> n >> m;
  57. vector <vector <int> > D(n + 1, vector <int> (n + 1, INF));
  58. Graph G(n);
  59.  
  60. for (int i = 1, u, v; i <= m; ++i)
  61. fin >> u >> v, G.Add_Edge(u, v);
  62.  
  63. for (int i = 1; i <= n; ++i)
  64. G.BFS(i, D[i]);
  65.  
  66. fin >> k;
  67. for (int i = 1, u, v; i <= k; ++i)
  68. fin >> u >> v, fout << D[u][v] << '\n';
  69.  
  70. return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement