#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m1,m2,a,b; cin >> n; set<pair<int, int>>poczpair; set<pair<int, int>>konpair; vector<vector<int>>pocz(n+1); vector<pair<int, int>>dod; vector<pair<int, int>>od; pair<int, int>p; vector<int>jedynkidodane; cin >> m1; for (int i = 0; i < m1; i++){ cin >> a >> b; p = make_pair(min(a, b), max(a, b)); poczpair.insert(p); pocz[a].push_back(b); pocz[b].push_back(a); } set<int>jedynkidozostawienia; cin >> m2; for (int i = 0; i < m2; i++){ cin >> a >> b; p = make_pair(min(a, b), max(a, b)); konpair.insert(p); if (p.first == 1){ jedynkidozostawienia.insert(p.second); } auto it = poczpair.find(p); if (it == poczpair.end() and p.first != 1){ dod.push_back(p); } } queue<int>q; vector<bool>o(n+1, 0); o[1] = 1; for (int i = 0; i < pocz[1].size(); i++){ q.push(pocz[1][i]); o[pocz[1][i]] = 1; } vector<int>jedynki; vector<int>jedynkiusuwanie; while (q.size() >= 1){ int x = q.front(); q.pop(); for (int i = 0; i < pocz[x].size(); i++){ if (o[pocz[x][i]] == 0){ q.push(pocz[x][i]); o[pocz[x][i]] = 1; jedynkidodane.push_back(pocz[x][i]); jedynki.push_back(pocz[x][i]); } } } for (auto it = poczpair.begin(); it != poczpair.end(); it++){ p = *it; if(p.first != 1){ auto ite = konpair.find(p); if (ite == konpair.end()){ od.push_back(p); } } } for (int i = 0; i < pocz[1].size(); i++){ jedynki.push_back(pocz[1][i]); } for (int i = 0; i < jedynki.size(); i++){ auto it = jedynkidozostawienia.find(jedynki[i]); if (it == jedynkidozostawienia.end()){ jedynkiusuwanie.push_back(jedynki[i]); } } int odps; odps = jedynkidodane.size() + dod.size() + od.size() + jedynkiusuwanie.size(); cout << odps << endl; for (int i = 0; i < jedynkidodane.size(); i++){ cout << "+ 1 "<< jedynkidodane[i] << endl; } for (int i = 0; i < dod.size(); i++){ cout << "+ " << dod[i].first << " " << dod[i].second << endl; } for (int i = 0; i < od .size(); i++){ cout << "- " << od[i].first << " " << od[i].second << endl; } for (int i = 0; i < jedynkiusuwanie.size(); i++){ cout << "- 1 "<< jedynkiusuwanie[i] << endl; } 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 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m1,m2,a,b; cin >> n; set<pair<int, int>>poczpair; set<pair<int, int>>konpair; vector<vector<int>>pocz(n+1); vector<pair<int, int>>dod; vector<pair<int, int>>od; pair<int, int>p; vector<int>jedynkidodane; cin >> m1; for (int i = 0; i < m1; i++){ cin >> a >> b; p = make_pair(min(a, b), max(a, b)); poczpair.insert(p); pocz[a].push_back(b); pocz[b].push_back(a); } set<int>jedynkidozostawienia; cin >> m2; for (int i = 0; i < m2; i++){ cin >> a >> b; p = make_pair(min(a, b), max(a, b)); konpair.insert(p); if (p.first == 1){ jedynkidozostawienia.insert(p.second); } auto it = poczpair.find(p); if (it == poczpair.end() and p.first != 1){ dod.push_back(p); } } queue<int>q; vector<bool>o(n+1, 0); o[1] = 1; for (int i = 0; i < pocz[1].size(); i++){ q.push(pocz[1][i]); o[pocz[1][i]] = 1; } vector<int>jedynki; vector<int>jedynkiusuwanie; while (q.size() >= 1){ int x = q.front(); q.pop(); for (int i = 0; i < pocz[x].size(); i++){ if (o[pocz[x][i]] == 0){ q.push(pocz[x][i]); o[pocz[x][i]] = 1; jedynkidodane.push_back(pocz[x][i]); jedynki.push_back(pocz[x][i]); } } } for (auto it = poczpair.begin(); it != poczpair.end(); it++){ p = *it; if(p.first != 1){ auto ite = konpair.find(p); if (ite == konpair.end()){ od.push_back(p); } } } for (int i = 0; i < pocz[1].size(); i++){ jedynki.push_back(pocz[1][i]); } for (int i = 0; i < jedynki.size(); i++){ auto it = jedynkidozostawienia.find(jedynki[i]); if (it == jedynkidozostawienia.end()){ jedynkiusuwanie.push_back(jedynki[i]); } } int odps; odps = jedynkidodane.size() + dod.size() + od.size() + jedynkiusuwanie.size(); cout << odps << endl; for (int i = 0; i < jedynkidodane.size(); i++){ cout << "+ 1 "<< jedynkidodane[i] << endl; } for (int i = 0; i < dod.size(); i++){ cout << "+ " << dod[i].first << " " << dod[i].second << endl; } for (int i = 0; i < od .size(); i++){ cout << "- " << od[i].first << " " << od[i].second << endl; } for (int i = 0; i < jedynkiusuwanie.size(); i++){ cout << "- 1 "<< jedynkiusuwanie[i] << endl; } return 0; } |