有两个点没过T~~T
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <set>
#include <cmath>
#include <string>
using namespace std;
struct friends {
int fa;
int fb;
bool operator<(const struct friends & f) const {
if (abs(fa) < abs(f.fa)) {
return true;
} else if (abs(fa) == abs(f.fa)) {
if (abs(fb) < abs(f.fb))
return true;
else
return false;
} else
return false;
}
};
constexpr int K=100;
set<struct friends> vv[K];
map <int, vector<int> > mapv;
void doIt (map<int, vector<int> > mapv, int n1, int n2, set<struct friends> &vv);
void getInteger(string str, int &nn) {
int len=str.length();
int sym=0, i=0;
if (str[0] == '-') {
sym=1;
i=1;
}
nn=0;
while (i < len) {
nn = nn*10+str[i]-'0';
i++;
}
if (nn != 0) {
if (sym == 1) {
nn=-nn;
}
} else {
if (sym == 1)
nn=-5678;
else
nn=5678;
}
}
int main () {
int n, m;
scanf ("%d %d", &n, &m);
int i=0;
int t1, t2;
string str1, str2;
while (i < m) {
cin >> str1 >> str2;
//scanf ("%d %d", &t1, &t2);
getInteger(str1, t1);
getInteger(str2, t2);
mapv[t1].push_back(t2);
mapv[t2].push_back(t1);
i++;
}
int k;
scanf ("%d", &k);
i=0;
while (i < k) {
//scanf ("%d %d", &t1, &t2);
cin >> str1 >> str2;
getInteger (str1, t1);
getInteger (str2, t2);
doIt (mapv, t1, t2, vv[i]);
i++;
}
i=0;
while (i < k) {
printf ("%d\n", vv[i].size());
for (auto iter=vv[i].begin(); iter!=vv[i].end(); iter++) {
printf ("%04d %04d\n", iter->fa, iter->fb);
}
i++;
}
return 0;
}
void doIt (map<int, vector<int> > mapv, int n1, int n2, set<struct friends> &vv) {
vector<int> vv1=mapv[n1];
vector<int> vv2=mapv[n2];
if (n1 == n2) {
return;
}
for (auto iter1=vv1.begin(); iter1!= vv1.end(); iter1++) {
if (n1>0 && *iter1<0 )
continue;
if (n1<0 && *iter1>0)
continue;
if (*iter1 == n2)
continue;
//if (find (vv2.begin(), vv2.end(), *iter1) != vv2.end())
// continue;
vector<int> vvv=mapv[*iter1];
for (auto iter2=vv2.begin(); iter2!=vv2.end(); iter2++) {
if (n2>0 && *iter2<0)
continue;
if (n2<0 && *iter2>0)
continue;
if (*iter2 == n1)
continue;
if (find (vvv.begin(), vvv.end(), *iter2) != vvv.end()) {
struct friends tff;
tff.fa=abs(*iter1);
tff.fb=abs(*iter2);
vv.insert(tff);
}
}
}
}
修改一下就过了:
后面的输出忘记把零转换回来了。。
while (i < k) {
printf ("%d\n", vv[i].size());
for (auto iter=vv[i].begin(); iter!=vv[i].end(); iter++) {
int tta, ttb;
tta=iter->fa;
ttb=iter->fb;
if (tta != 5678 && tta != -5678) {
printf ("%04d", tta);
} else {
printf ("0000");
}
if (ttb != 5678 && ttb != -5678) {
printf (" %04d\n", ttb);
} else {
printf (" 0000\n");
}
//printf ("%04d %04d\n", iter->fa, iter->fb);
}
i++;
}