Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int rozmiar = 1000 * 100 + 10;
- int poprzedni[rozmiar];
- bool was[rozmiar];
- int d[rozmiar];
- vector<int> graph[rozmiar];
- int x, y;
- int n, m, q;
- void bfs(int v ){
- queue<int> q;
- q.push(v);
- while (q.size ()){
- int top = q.front (); q.pop ();
- was[top] = true;
- for(int i = 0; i < graph[top].size (); i ++)
- {
- int u = graph[top][i];
- if (!was[u]){
- was[u] = true;
- poprzedni[u] = top;
- d[u] = d[top] + 1;
- q.push(u);
- }
- if (u == y)
- break;
- }
- }
- //cout << "here" << endl;
- if (!d[y]){
- cout << -1 << "\n";
- }
- else {
- vector<int> ver;
- ver.push_back(y);
- int pom = y;
- while (poprzedni[y] != 0){
- y = poprzedni[y];
- ver.push_back(y);
- }
- cout << d[pom] << " ";
- for(int i = -1 + ver.size (); i >= 0; i --){
- cout << ver[i] << " ";
- }
- cout << "\n";
- }
- for(int i = 0; i <= n; i ++){
- was[i] = 0;
- d[i] = 0;
- poprzedni[i] = 0;
- }
- }
- int main (){
- ios_base::sync_with_stdio(false);cin.tie();cout.tie();
- cin >> n >> m >> q;
- for(int i = 0; i < m; i ++){
- int v1, v2;
- cin >> v1 >> v2;
- graph[v1].push_back(v2);
- graph[v2].push_back(v1);
- }
- for(int i = 0; i < q; i ++)
- {
- cin >> x >> y;
- if (x == y ){
- cout << "0 " << x << "\n";
- }
- else
- bfs(x);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement