// clang-format off
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ssize(x) int(x.size())
template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<'('<<p.first<<", "<<p.second<<')';}
template<typename T,typename = typename enable_if<!is_same<T,string>::value>::type>
auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';}
#ifdef DEBUG
#define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n'
#else
#define debug(...) {}
#endif
// clang-format on
bitset<30007> graph1;
bitset<30007> graph2;
vector<int> vgraph1[30007];
vector<int> vgraph2[30007];
vector<pair<char, pair<int, int>>> ans;
vector<pair<int, int>> edges1;
vector<pair<int, int>> edges2;
bitset<30007> vis;
void dfs1(int v)
{
vis[v] = 1;
for (int u : vgraph1[v])
{
if (vis[u])
continue;
if (!graph1[u])
{
ans.push_back({'+', {1, u}});
}
dfs1(u);
}
}
void dfs2(int v)
{
vis[v] = 1;
for (int u : vgraph2[v])
{
if (vis[u])
continue;
dfs2(u);
if (!graph2[u])
{
ans.push_back({'-', {1, u}});
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m1, m2, a, b;
cin >> n;
cin >> m1;
for (int i = 0; i < m1; i++)
{
cin >> a >> b;
if (b < a)
swap(a, b);
if (a == 1)
graph1[b] = 1;
vgraph1[a].push_back(b);
vgraph1[b].push_back(a);
edges1.push_back({a, b});
}
cin >> m2;
for (int i = 0; i < m2; i++)
{
cin >> a >> b;
if (b < a)
swap(a, b);
if (a == 1)
graph2[b] = 1;
vgraph2[a].push_back(b);
vgraph2[b].push_back(a);
edges2.push_back({a, b});
}
dfs1(1);
vis.reset();
for (auto i : edges1)
if (i.first != 1)
ans.push_back({'-', i});
for (auto i : edges2)
if (i.first != 1)
ans.push_back({'+', i});
dfs2(1);
cout << ssize(ans) << '\n';
for (auto i : ans)
cout << i.first << ' ' << i.second.first << ' ' << i.second.second << '\n';
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | // clang-format off #include<bits/stdc++.h> using namespace std; #define ll long long #define ssize(x) int(x.size()) template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<'('<<p.first<<", "<<p.second<<')';} template<typename T,typename = typename enable_if<!is_same<T,string>::value>::type> auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';} #ifdef DEBUG #define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n' #else #define debug(...) {} #endif // clang-format on bitset<30007> graph1; bitset<30007> graph2; vector<int> vgraph1[30007]; vector<int> vgraph2[30007]; vector<pair<char, pair<int, int>>> ans; vector<pair<int, int>> edges1; vector<pair<int, int>> edges2; bitset<30007> vis; void dfs1(int v) { vis[v] = 1; for (int u : vgraph1[v]) { if (vis[u]) continue; if (!graph1[u]) { ans.push_back({'+', {1, u}}); } dfs1(u); } } void dfs2(int v) { vis[v] = 1; for (int u : vgraph2[v]) { if (vis[u]) continue; dfs2(u); if (!graph2[u]) { ans.push_back({'-', {1, u}}); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m1, m2, a, b; cin >> n; cin >> m1; for (int i = 0; i < m1; i++) { cin >> a >> b; if (b < a) swap(a, b); if (a == 1) graph1[b] = 1; vgraph1[a].push_back(b); vgraph1[b].push_back(a); edges1.push_back({a, b}); } cin >> m2; for (int i = 0; i < m2; i++) { cin >> a >> b; if (b < a) swap(a, b); if (a == 1) graph2[b] = 1; vgraph2[a].push_back(b); vgraph2[b].push_back(a); edges2.push_back({a, b}); } dfs1(1); vis.reset(); for (auto i : edges1) if (i.first != 1) ans.push_back({'-', i}); for (auto i : edges2) if (i.first != 1) ans.push_back({'+', i}); dfs2(1); cout << ssize(ans) << '\n'; for (auto i : ans) cout << i.first << ' ' << i.second.first << ' ' << i.second.second << '\n'; return 0; } |
English