#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int def(int a, int b, vector<vector<int>> &graf)
{
auto tmp = find(graf[a].begin(), graf[a].end(), b);
if(tmp != graf[a].end())
return 0;
else
{
if(b == n)
{
auto ser = find(graf[a].begin(), graf[a].end(), b-1);
if(ser == graf[a].end())
{
// cout << "+ " << a << " " << b-1 << "\n";
// cout << "+ " << a << " " << b << "\n";
graf[a].emplace_back(b);
graf[b].emplace_back(a);
//cout<< "- " << a << " " << b-1 << "\n";
return 3;
}
}
else
{
auto ser = find(graf[a].begin(), graf[a].end(), b+1);
if(ser == graf[a].end())
{
// cout << "+ " << a << " " << b+1 << "\n";
// cout << "+ " << a << " " << b << "\n";
graf[a].emplace_back(b);
graf[b].emplace_back(a);
// cout<< "- " << a << " " << b+1 << "\n";
return 3;
}
}
}
// cout << "+ " << a << " " << b << "\n";
graf[a].emplace_back(b);
graf[b].emplace_back(a);
return 1;
}
void def2(int a, int b, vector<vector<int>> &graf)
{
auto tmp = find(graf[a].begin(), graf[a].end(), b);
if(tmp != graf[a].end())
return;
else
{
if(b == n)
{
auto ser = find(graf[a].begin(), graf[a].end(), b-1);
if(ser == graf[a].end())
{
cout << "+ " << a << " " << b-1 << "\n";
cout << "+ " << a << " " << b << "\n";
graf[a].emplace_back(b);
graf[b].emplace_back(a);
cout<< "- " << a << " " << b-1 << "\n";
return;
}
}
else
{
auto ser = find(graf[a].begin(), graf[a].end(), b+1);
if(ser == graf[a].end())
{
cout << "+ " << a << " " << b+1 << "\n";
cout << "+ " << a << " " << b << "\n";
graf[a].emplace_back(b);
graf[b].emplace_back(a);
cout<< "- " << a << " " << b+1 << "\n";
return;
}
}
}
cout << "+ " << a << " " << b << "\n";
graf[a].emplace_back(b);
graf[b].emplace_back(a);
return;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int ms, md;
int a, b;
cin >> n >> ms;
vector<vector<int>> start_graf(n + 1);
vector<vector<int>> graf(n + 1);
vector<vector<int>> graf2(n + 1);
for (int i = 0; i < ms; ++i) {
cin >> a >> b;
graf[a].push_back(b);
graf[b].push_back(a);
graf2[a].push_back(b);
graf2[b].push_back(a);
start_graf[a].push_back(b);
}
cin >> md;
int res{0};
vector<vector<int>> target_graf(n + 1);
vector<pair<int,int>> target(md);
for (int i = 0; i < md; ++i) {
int a, b;
cin >> a >> b;
target[i]=make_pair(a,b);
target_graf[a].push_back(b);
target_graf[b].push_back(a);
}
for (int i = 0; i < md; ++i) {
res+=def(target[i].first, target[i].second, graf);
}
vector<pair<int,int>>forerase;
for(int i{1}; i<start_graf.size();i++)
{
for(int j{0}; j<start_graf[i].size();j++)
{
auto g = find(target_graf[i].begin(), target_graf[i].end(), start_graf[i][j]);
if(g == target_graf[i].end())
{
res++;
forerase.push_back(make_pair(i, start_graf[i][j]));
}
}
}
cout<<res<<"\n";
for (int i = 0; i < md; ++i) {
def2(target[i].first, target[i].second, graf2);
}
for(int i=0;i<forerase.size();i++)
cout << "- " << forerase[i].first << " " << forerase[i].second << "\n";
}
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | #include <iostream> #include <algorithm> #include <vector> using namespace std; int n; int def(int a, int b, vector<vector<int>> &graf) { auto tmp = find(graf[a].begin(), graf[a].end(), b); if(tmp != graf[a].end()) return 0; else { if(b == n) { auto ser = find(graf[a].begin(), graf[a].end(), b-1); if(ser == graf[a].end()) { // cout << "+ " << a << " " << b-1 << "\n"; // cout << "+ " << a << " " << b << "\n"; graf[a].emplace_back(b); graf[b].emplace_back(a); //cout<< "- " << a << " " << b-1 << "\n"; return 3; } } else { auto ser = find(graf[a].begin(), graf[a].end(), b+1); if(ser == graf[a].end()) { // cout << "+ " << a << " " << b+1 << "\n"; // cout << "+ " << a << " " << b << "\n"; graf[a].emplace_back(b); graf[b].emplace_back(a); // cout<< "- " << a << " " << b+1 << "\n"; return 3; } } } // cout << "+ " << a << " " << b << "\n"; graf[a].emplace_back(b); graf[b].emplace_back(a); return 1; } void def2(int a, int b, vector<vector<int>> &graf) { auto tmp = find(graf[a].begin(), graf[a].end(), b); if(tmp != graf[a].end()) return; else { if(b == n) { auto ser = find(graf[a].begin(), graf[a].end(), b-1); if(ser == graf[a].end()) { cout << "+ " << a << " " << b-1 << "\n"; cout << "+ " << a << " " << b << "\n"; graf[a].emplace_back(b); graf[b].emplace_back(a); cout<< "- " << a << " " << b-1 << "\n"; return; } } else { auto ser = find(graf[a].begin(), graf[a].end(), b+1); if(ser == graf[a].end()) { cout << "+ " << a << " " << b+1 << "\n"; cout << "+ " << a << " " << b << "\n"; graf[a].emplace_back(b); graf[b].emplace_back(a); cout<< "- " << a << " " << b+1 << "\n"; return; } } } cout << "+ " << a << " " << b << "\n"; graf[a].emplace_back(b); graf[b].emplace_back(a); return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int ms, md; int a, b; cin >> n >> ms; vector<vector<int>> start_graf(n + 1); vector<vector<int>> graf(n + 1); vector<vector<int>> graf2(n + 1); for (int i = 0; i < ms; ++i) { cin >> a >> b; graf[a].push_back(b); graf[b].push_back(a); graf2[a].push_back(b); graf2[b].push_back(a); start_graf[a].push_back(b); } cin >> md; int res{0}; vector<vector<int>> target_graf(n + 1); vector<pair<int,int>> target(md); for (int i = 0; i < md; ++i) { int a, b; cin >> a >> b; target[i]=make_pair(a,b); target_graf[a].push_back(b); target_graf[b].push_back(a); } for (int i = 0; i < md; ++i) { res+=def(target[i].first, target[i].second, graf); } vector<pair<int,int>>forerase; for(int i{1}; i<start_graf.size();i++) { for(int j{0}; j<start_graf[i].size();j++) { auto g = find(target_graf[i].begin(), target_graf[i].end(), start_graf[i][j]); if(g == target_graf[i].end()) { res++; forerase.push_back(make_pair(i, start_graf[i][j])); } } } cout<<res<<"\n"; for (int i = 0; i < md; ++i) { def2(target[i].first, target[i].second, graf2); } for(int i=0;i<forerase.size();i++) cout << "- " << forerase[i].first << " " << forerase[i].second << "\n"; } |
English