#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int MX=100100; int n,m,x,y,d[MX],q[MX]; vector<int> g[MX]; vector<pii> ans[2]; set<pii> all[2]; int main() { scanf("%d",&n); for (int t=0; t<2; t++) { for (int i=1; i<=n; i++) { g[i].clear(); d[i]=-1; } scanf("%d",&m); for (int i=0; i<m; i++) { scanf("%d%d",&x,&y); g[x].push_back(y); g[y].push_back(x); all[t].insert({min(x,y),max(x,y)}); } int fi=d[1]=0,fr=q[0]=1; for (; fi<fr; fi++) { x=q[fi]; if (d[x]>1) ans[t].emplace_back(1,x); for (int nxt: g[x]) if (d[nxt]==-1) { d[nxt]=d[x]+1; q[fr++]=nxt; } } } for (int t=0; t<2; t++) for (auto it=all[t].begin(); it!=all[t].end(); it++) if (it->first>1) { auto oth=all[t^1].find(*it); if (oth==all[t^1].end()) ans[t^1].push_back(*it); } reverse(ans[1].begin(),ans[1].end()); printf("%d\n",int(ans[0].size()+ans[1].size())); for (int t=0; t<2; t++) for (int i=0; i<ans[t].size(); i++) printf("%c %d %d\n",(t?'-':'+'),ans[t][i].first,ans[t][i].second); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int MX=100100; int n,m,x,y,d[MX],q[MX]; vector<int> g[MX]; vector<pii> ans[2]; set<pii> all[2]; int main() { scanf("%d",&n); for (int t=0; t<2; t++) { for (int i=1; i<=n; i++) { g[i].clear(); d[i]=-1; } scanf("%d",&m); for (int i=0; i<m; i++) { scanf("%d%d",&x,&y); g[x].push_back(y); g[y].push_back(x); all[t].insert({min(x,y),max(x,y)}); } int fi=d[1]=0,fr=q[0]=1; for (; fi<fr; fi++) { x=q[fi]; if (d[x]>1) ans[t].emplace_back(1,x); for (int nxt: g[x]) if (d[nxt]==-1) { d[nxt]=d[x]+1; q[fr++]=nxt; } } } for (int t=0; t<2; t++) for (auto it=all[t].begin(); it!=all[t].end(); it++) if (it->first>1) { auto oth=all[t^1].find(*it); if (oth==all[t^1].end()) ans[t^1].push_back(*it); } reverse(ans[1].begin(),ans[1].end()); printf("%d\n",int(ans[0].size()+ans[1].size())); for (int t=0; t<2; t++) for (int i=0; i<ans[t].size(); i++) printf("%c %d %d\n",(t?'-':'+'),ans[t][i].first,ans[t][i].second); return 0; } |