#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; } |
English