添加链接描述
找的C是A的同性朋友,D是B的同性朋友
并且C和D是朋友
要注意会有-0000的情况 用string读入而不是数字单纯正负
要注意输出%04d而不是%4d!!!!(测试点 1 2 5
#include<bits/stdc++.h>
//!!这题不是并查集是因为这题是找直接朋友 而不是朋友的朋友
using namespace std;
const int N=1e5+9;
map<int,bool>mp;
vector<int> v[N];
typedef pair<int,int> pii;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
string a,b;
cin>>a>>b;
int x=abs(stoi(a)),y=abs(stoi(b));
if(a.size()==b.size())v[x].push_back(y),v[y].push_back(x);
mp[x*10000+y]=mp[y*10000+x]=1;
}
int q;
cin>>q;
while(q--){
set<pii>s;
vector<int>ansa,ansb;
string a,b;
cin>>a>>b;
int x=abs(stoi(a)),y=abs(stoi(b));
for(auto it:v[x]){
if(mp[it*10000+x]&&it!=y){
ansa.push_back(it);
}
}
for(auto it:v[y]){
if(mp[it*10000+y]&&it!=x){
ansb.push_back(it);
}
}
sort(ansa.begin(),ansa.end());
sort(ansb.begin(),ansb.end());
// cout<<ansa.size()*ansb.size()<<endl;
// if(ansa.size()*ansb.size())
for(auto it:ansa){
for(auto jt:ansb){
if(mp[jt*10000+it])
// if(s.find({it,jt})==s.end()){
s.insert({it,jt});
// }
}
}
cout<<s.size()<<endl;
for(auto it:s){
// cout<<it.first<<" "<<it.second<<endl;
printf("%04d %04d\n",it.first,it.second);
}
}
return 0;
}