码上,再来补
2019年2月25日
9:30
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int n, m;
const int maxn = 2e4 + 5;;
vector<int> r[maxn],xx, yy;
queue<int> q;
int rt[maxn][maxn];
void Find(int a, int b)
{
int cnt = 0, x, y;
for(int i = 0; i < r[a].size(); i++)
{
x = r[a][i];
if(x / 1000 == a / 1000)
{
q.push(x);
}
}
while(!q.empty())
{
x = q.front();
q.pop();
for(int j = 0; j < r[b].size(); j++)
{
y = r[b][j];
if(y / 1000 == b / 1000 && rt[x][y] == 1)
{
cnt++;
xx.push_back(x);
yy.push_back(y);
}
}
}
if(cnt == 0)
{
cout << 0 << endl;
return ;
}
cout << xx.size() << endl;
for(int i = 0; i < xx.size(); i++)
cout << xx[i] << " "<< yy[i] << endl;
xx.clear();
yy.clear();
return ;
}
int main()
{
int a, b;
queue<int> s;
while(cin >> n>> m)
{
for(int i = 0; i < m; i++)
{
cin >> a >> b;
a = abs(a);
b = abs(b);
r[a].push_back(b);
r[b].push_back(a);
rt[a][b] = rt[b][a] = 1;
s.push(a);
s.push(b);
}
while(!s.empty())
{
int i = s.front();
s.pop();
sort(r[i].begin(), r[i].end());
}
int k;
cin >> k;
for(int i = 0; i < k; i++)
{
cin >> a >> b;
a = abs(a);
b = abs(b);
Find(a, b);
}
}
return 0;
}