Unlike in nowadays, the way that boys and girls expressing their feelings of love was quite subtle in the early years. When a boy A had a crush on a girl B, he would usually not contact her directly in the first place. Instead, he might ask another boy C, one of his close friends, to ask another girl D, who was a friend of both B and C, to send a message to B -- quite a long shot, isn't it? Girls would do analogously.

Here given a network of friendship relations, you are supposed to help a boy or a girl to list all their friends who can possibly help them making the first contact.

Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers N (1 < N ≤ 300) and M, being the total number of people and the number of friendship relations, respectively. Then M lines follow, each gives a pair of friends. Here a person is represented by a 4-digit ID. To tell their genders, we use a negative sign to represent girls.

After the relations, a positive integer K (≤ 100) is given, which is the number of queries. Then K lines of queries follow, each gives a pair of lovers, separated by a space. It is assumed that the first one is having a crush on the second one.

Output Specification:

For each query, first print in a line the number of different pairs of friends they can find to help them, then in each line print the IDs of a pair of friends.

If the lovers A and B are of opposite genders, you must first print the friend of A who is of the same gender of A, then the friend of B, who is of the same gender of B. If they are of the same gender, then both friends must be in the same gender as theirs. It is guaranteed that each person has only one gender.

The friends must be printed in non-decreasing order of the first IDs, and for the same first ones, in increasing order of the seconds ones.

Sample Input:

10 18

-2001 1001

-2002 -2001

1004 1001

-2004 -2001

-2003 1005

1005 -2001

1001 -2003

1002 1001

1002 -2004

-2004 1001

1003 -2002

-2003 1003

1004 -2002

-2001 -2003

1001 1003

1003 -2001

1002 -2001

-2002 -2003

5

1001 -2001

-2003 1001

1005 -2001

-2002 -2004

1111 -2003

Sample Output:

4

1002 2004

1003 2002

1003 2003

1004 2002

4

2001 1002

2001 1003

2002 1003

2002 1004

0

1

2003 2001

0

#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
#include<unordered_map>
using namespace std;
struct node{
int a, b;
};
bool cmp(const node& n1, const node& n2){
return (n1.a!=n2.a?n1.a<n2.a:n1.b<n2.b);
}
unordered_map<int, int> arr;
vector<vector<int>> vec(10000);
int main(){
int n, m, qn, p, q;
string x, y;
cin>>n>>m;
for(int i=0; i<m; i++){
cin>>x>>y;
if(x.size()==y.size()){
vec[abs(stoi(x))].push_back(abs(stoi(y)));
vec[abs(stoi(y))].push_back(abs(stoi(x)));
}
arr[abs(stoi(x))*10000+abs(stoi(y))]=arr[abs(stoi(y))*10000+abs(stoi(x))]=1;
}
cin>>qn;
for(int i=0; i<qn; i++){
cin>>p>>q;
vector<node> ans;
for(int j=0; j<vec[abs(p)].size(); j++)
for(int k=0; k<vec[abs(q)].size(); k++){
if(vec[abs(p)][j]==abs(q)||vec[abs(q)][k]==abs(p)) continue;
if(arr[vec[abs(p)][j]*10000+vec[abs(q)][k]]==1)
ans.push_back(node{vec[abs(p)][j], vec[abs(q)][k]});
} sort(ans.begin(), ans.end(), cmp);
cout<<int(ans.size())<<endl;
for(int j=0; j<ans.size(); j++)
printf("%04d %04d\n", ans[j].a, ans[j].b);
}
return 0;
}

最新文章

  1. Writing Clean Code 读后感
  2. MVC 路由介绍
  3. 循序渐进开发WinForm项目(6)--开发使用混合式Winform模块
  4. AFN 2.6 code报错总结
  5. uml入门之14图与图之间的关系
  6. Centos python 2.6 升级到2.7.3
  7. JavaScript网页制作特效
  8. cocostudio中button
  9. Android Screen Monitor使用
  10. React-Native 之 项目实战(四)
  11. 数据库常用语句sql
  12. Laravel 5.3 单用户登录的简单实现
  13. 涂抹mysql笔记-数据库中的权限体系
  14. 【读书笔记】iOS-多点触摸事件与界面几何
  15. 5个python爬虫教材,让小白也有爬虫可写,含视频教程!
  16. Centos7安装出现的问题:找不到安装源或者检查软件配置出错
  17. 08-02 Java 代码块,代码块执行的先后顺序问题
  18. Sublime Text 2 绿化与汉化 [Windows篇]
  19. RHEL/CentOS 7.x/6.x/5.x开启EPEL仓库
  20. 敏捷软件开发:原则、模式与实践——第11章 DIP:依赖倒置原则

热门文章

  1. SpringBoot中使用spring-data-jpa 数据库操作(上)
  2. HashMap1
  3. bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径【tarjan】
  4. 17年day3
  5. [App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(1)App Store 图标、App 预览和屏幕快照概述
  6. (数论)51NOD 1135 原根
  7. JavaScript--DOM访问子结点childNodes
  8. ASP.Net 知识点总结(五)
  9. MySQL故障处理一例_Another MySQL daemon already running with the same unix socket
  10. 【转】mysql INSERT的用法