#include<bits/stdc++.h> using namespace std; struct zzz{ int typ, a, b; }; const int maxn=30009; vector<int> D[maxn], G[maxn]; bool zajete[maxn], odw[maxn], odw2[maxn]; vector<zzz> zap; void DFS(int v) { odw[v]=1; if(!zajete[v]) { zap.push_back({1, 1, v}); } for(auto s:D[v]) { if(!odw[s]) { DFS(s); } } } void DFS2(int v) { odw2[v]=1; for(auto s:G[v]) { if(!odw2[s]) { DFS2(s); } } if(!zajete[v]) { zap.push_back({-1, 1, v}); } } 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=1; i<=m1; i++) { cin >> a >> b; D[a].push_back(b); D[b].push_back(a); } cin >> m2; for(int i=1; i<=m2; i++) { cin >> a >> b; G[a].push_back(b); G[b].push_back(a); } if(n==2) { cout << 0 << endl; return 0; } zajete[1]=1; for(auto s:D[1]) { zajete[s]=1; } DFS(1); for(int i=2; i<=n; i++) { for(auto s:D[i]) { if(s!=1 && s>i) { zap.push_back({-1, i, s}); } } } for(int i=2; i<=n; i++) { for(auto s:G[i]) { if(s!=1 && s>i) { zap.push_back({1, i, s}); } } } ///mamy koncowy graf + wszystkie krawedzie od 1 for(int i=1; i<=n; i++) { zajete[i]=0; } zajete[1]=1; for(auto s:G[1]) { zajete[s]=1; } DFS2(1); cout << zap.size() << endl; for(auto dupa:zap) { if(dupa.typ==-1) { cout << "- "; } else { cout << "+ "; } cout << dupa.a << ' ' << dupa.b << endl; } }
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 | #include<bits/stdc++.h> using namespace std; struct zzz{ int typ, a, b; }; const int maxn=30009; vector<int> D[maxn], G[maxn]; bool zajete[maxn], odw[maxn], odw2[maxn]; vector<zzz> zap; void DFS(int v) { odw[v]=1; if(!zajete[v]) { zap.push_back({1, 1, v}); } for(auto s:D[v]) { if(!odw[s]) { DFS(s); } } } void DFS2(int v) { odw2[v]=1; for(auto s:G[v]) { if(!odw2[s]) { DFS2(s); } } if(!zajete[v]) { zap.push_back({-1, 1, v}); } } 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=1; i<=m1; i++) { cin >> a >> b; D[a].push_back(b); D[b].push_back(a); } cin >> m2; for(int i=1; i<=m2; i++) { cin >> a >> b; G[a].push_back(b); G[b].push_back(a); } if(n==2) { cout << 0 << endl; return 0; } zajete[1]=1; for(auto s:D[1]) { zajete[s]=1; } DFS(1); for(int i=2; i<=n; i++) { for(auto s:D[i]) { if(s!=1 && s>i) { zap.push_back({-1, i, s}); } } } for(int i=2; i<=n; i++) { for(auto s:G[i]) { if(s!=1 && s>i) { zap.push_back({1, i, s}); } } } ///mamy koncowy graf + wszystkie krawedzie od 1 for(int i=1; i<=n; i++) { zajete[i]=0; } zajete[1]=1; for(auto s:G[1]) { zajete[s]=1; } DFS2(1); cout << zap.size() << endl; for(auto dupa:zap) { if(dupa.typ==-1) { cout << "- "; } else { cout << "+ "; } cout << dupa.a << ' ' << dupa.b << endl; } } |