#include <iostream> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); int n, ms, md, n2, ms2, md2; std::cin >> n; n2=n*2; std::cin >> ms; ms2=ms*2; int ** wias=new int*[n]; int * wias_c=new int[n]; int * sources=new int[ms*2]; std::fill(wias_c, wias_c+n, 0); for (int i=0; i<ms2; i+=2) { std::cin >> sources[i] >> sources[i+1]; sources[i]-=1; sources[i+1]-=1; wias_c[sources[i]]+=1; wias_c[sources[i+1]]+=1; } for (int i=0; i<n; i++) { wias[i]=new int[wias_c[i]]; wias_c[i]=0; } for (int i=0; i<ms2; i+=2) { wias[sources[i]][wias_c[sources[i]]]=sources[i+1]; wias_c[sources[i]]+=1; wias[sources[i+1]][wias_c[sources[i+1]]]=sources[i]; wias_c[sources[i+1]]+=1; } int ** wiad=new int*[n]; int * wiad_c=new int[n]; std::cin >> md; md2=md*2; int * sourced=new int[md2]; std::fill(wiad_c, wiad_c+n, 0); for (int i=0; i<md2; i+=2) { std::cin >> sourced[i] >> sourced[i+1]; sourced[i]-=1; sourced[i+1]-=1; wiad_c[sourced[i]]+=1; wiad_c[sourced[i+1]]+=1; } for (int i=0; i<n; i++) { wiad[i]=new int[wiad_c[i]]; wiad_c[i]=0; } for (int i=0; i<md2; i+=2) { wiad[sourced[i]][wiad_c[sourced[i]]]=sourced[i+1]; wiad_c[sourced[i]]+=1; wiad[sourced[i+1]][wiad_c[sourced[i+1]]]=sourced[i]; wiad_c[sourced[i+1]]+=1; } std::cout << (n+n+md+ms-wias_c[0]-wias_c[0]-wiad_c[0]-wiad_c[0]-2) << '\n'; bool * was=new bool[n]; std::fill(was, was+n, false); was[0]=true; int * que=new int[n]; que[0]=0; int que1=1; for (int i=0; i<n; i++) { for(int j=0; j<wias_c[que[i]]; j++) { if (!(was[wias[que[i]][j]])) { was[wias[que[i]][j]]=true; que[que1]=wias[que[i]][j]; que1++; } } } for (int i=wias_c[0]+1; i<n; i++) { std::cout << "+ " << 1 << ' ' << (que[i]+1) << '\n'; } for (int i=0; i<ms2; i+=2) { if ((sources[i] != 0) && (sources[i+1] != 0)) { std::cout << "- " << (sources[i]+1) << ' ' << (sources[i+1]+1) << '\n'; } } std::fill(was, was+n, false); was[0]=true; que[0]=0; que1=1; for (int i=0; i<n; i++) { for(int j=0; j<wiad_c[que[i]]; j++) { if (!(was[wiad[que[i]][j]])) { was[wiad[que[i]][j]]=true; que[que1]=wiad[que[i]][j]; que1++; } } } for (int i=0; i<md2; i+=2) { if ((sourced[i] != 0) && (sourced[i+1] != 0)) { std::cout << "+ " << (sourced[i]+1) << ' ' << (sourced[i+1]+1) << '\n'; } } for (int i=n-1; i>wiad_c[0]; i--) { std::cout << "- " << 1 << ' ' << (que[i]+1) << '\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 104 105 106 107 | #include <iostream> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); int n, ms, md, n2, ms2, md2; std::cin >> n; n2=n*2; std::cin >> ms; ms2=ms*2; int ** wias=new int*[n]; int * wias_c=new int[n]; int * sources=new int[ms*2]; std::fill(wias_c, wias_c+n, 0); for (int i=0; i<ms2; i+=2) { std::cin >> sources[i] >> sources[i+1]; sources[i]-=1; sources[i+1]-=1; wias_c[sources[i]]+=1; wias_c[sources[i+1]]+=1; } for (int i=0; i<n; i++) { wias[i]=new int[wias_c[i]]; wias_c[i]=0; } for (int i=0; i<ms2; i+=2) { wias[sources[i]][wias_c[sources[i]]]=sources[i+1]; wias_c[sources[i]]+=1; wias[sources[i+1]][wias_c[sources[i+1]]]=sources[i]; wias_c[sources[i+1]]+=1; } int ** wiad=new int*[n]; int * wiad_c=new int[n]; std::cin >> md; md2=md*2; int * sourced=new int[md2]; std::fill(wiad_c, wiad_c+n, 0); for (int i=0; i<md2; i+=2) { std::cin >> sourced[i] >> sourced[i+1]; sourced[i]-=1; sourced[i+1]-=1; wiad_c[sourced[i]]+=1; wiad_c[sourced[i+1]]+=1; } for (int i=0; i<n; i++) { wiad[i]=new int[wiad_c[i]]; wiad_c[i]=0; } for (int i=0; i<md2; i+=2) { wiad[sourced[i]][wiad_c[sourced[i]]]=sourced[i+1]; wiad_c[sourced[i]]+=1; wiad[sourced[i+1]][wiad_c[sourced[i+1]]]=sourced[i]; wiad_c[sourced[i+1]]+=1; } std::cout << (n+n+md+ms-wias_c[0]-wias_c[0]-wiad_c[0]-wiad_c[0]-2) << '\n'; bool * was=new bool[n]; std::fill(was, was+n, false); was[0]=true; int * que=new int[n]; que[0]=0; int que1=1; for (int i=0; i<n; i++) { for(int j=0; j<wias_c[que[i]]; j++) { if (!(was[wias[que[i]][j]])) { was[wias[que[i]][j]]=true; que[que1]=wias[que[i]][j]; que1++; } } } for (int i=wias_c[0]+1; i<n; i++) { std::cout << "+ " << 1 << ' ' << (que[i]+1) << '\n'; } for (int i=0; i<ms2; i+=2) { if ((sources[i] != 0) && (sources[i+1] != 0)) { std::cout << "- " << (sources[i]+1) << ' ' << (sources[i+1]+1) << '\n'; } } std::fill(was, was+n, false); was[0]=true; que[0]=0; que1=1; for (int i=0; i<n; i++) { for(int j=0; j<wiad_c[que[i]]; j++) { if (!(was[wiad[que[i]][j]])) { was[wiad[que[i]][j]]=true; que[que1]=wiad[que[i]][j]; que1++; } } } for (int i=0; i<md2; i+=2) { if ((sourced[i] != 0) && (sourced[i+1] != 0)) { std::cout << "+ " << (sourced[i]+1) << ' ' << (sourced[i+1]+1) << '\n'; } } for (int i=n-1; i>wiad_c[0]; i--) { std::cout << "- " << 1 << ' ' << (que[i]+1) << '\n'; } return 0; } |