#include<bits/stdc++.h> using namespace std; int n, k, a, b; vector<int> v[1000005]; vector<tuple<bool, int, int>> dodaj_promyki(){ vector<tuple<bool, int,int>> result; queue<int> q; int odl[1000005]; for(int i = 1 ; i <= n ; i++){ odl[i] = -1; } odl[1] = 0; q.push(1); while(!q.empty()){ int aktualny = q.front(); q.pop(); for(int sasiad : v[aktualny]){ if(odl[sasiad] == -1){ odl[sasiad] = odl[aktualny] + 1; q.push(sasiad); if(odl[sasiad] > 1){ result.push_back({true, 1, sasiad}); v[1].push_back(sasiad); v[sasiad].push_back(1); } } } } return result; } vector<tuple<bool, int, int>> usun_graf(){ vector<tuple<bool, int,int>> result; for(int i = 2 ; i <= n ; i++){ for(int j = 0 ; j < v[i].size() ; j++){ int sasiad = v[i][j]; if(sasiad > i){ result.push_back({false, i, sasiad}); } } } return result; } int main(){ ios_base::sync_with_stdio(0); cin >> n; vector<tuple<bool, int,int>> p1; vector<tuple<bool, int,int>> u2; for(int wczytanie = 0 ; wczytanie < 2 ; wczytanie++){ cin >> k; for(int i = 1 ; i <= n ; i++){ v[i].clear(); } for(int i = 0 ; i < k ; i++){ cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } vector<tuple<bool, int,int>> promyki = dodaj_promyki(); vector<tuple<bool, int,int>> usuniete = usun_graf(); if(wczytanie == 0){ // for(int i = 0 ; i < promyki.size() ; i++){ // cout << "+" << " " << get<1>(promyki[i]) << " " << get<2>(promyki[i]) << endl; // } // for(int i = 0 ; i < usuniete.size() ; i++){ // cout << "-" << " " << get<1>(usuniete[i]) << " " << get<2>(usuniete[i]) << endl; // } p1 = promyki; u2 = usuniete; } else{ int rozmiar = promyki.size() + usuniete.size() + p1.size() + u2.size(); cout << rozmiar << endl; for(int i = 0 ; i < p1.size() ; i++){ cout << "+" << " " << get<1>(p1[i]) << " " << get<2>(p1[i]) << endl; } for(int i = 0 ; i < u2.size() ; i++){ cout << "-" << " " << get<1>(u2[i]) << " " << get<2>(u2[i]) << endl; } for(int i = 0 ; i < usuniete.size() ; i++){ cout << "+" << " " << get<1>(usuniete[i]) << " " << get<2>(usuniete[i]) << endl; } for(int i = 0 ; i < promyki.size() ; i++){ cout << "-" << " " << get<1>(promyki[i]) << " " << get<2>(promyki[i]) << 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 | #include<bits/stdc++.h> using namespace std; int n, k, a, b; vector<int> v[1000005]; vector<tuple<bool, int, int>> dodaj_promyki(){ vector<tuple<bool, int,int>> result; queue<int> q; int odl[1000005]; for(int i = 1 ; i <= n ; i++){ odl[i] = -1; } odl[1] = 0; q.push(1); while(!q.empty()){ int aktualny = q.front(); q.pop(); for(int sasiad : v[aktualny]){ if(odl[sasiad] == -1){ odl[sasiad] = odl[aktualny] + 1; q.push(sasiad); if(odl[sasiad] > 1){ result.push_back({true, 1, sasiad}); v[1].push_back(sasiad); v[sasiad].push_back(1); } } } } return result; } vector<tuple<bool, int, int>> usun_graf(){ vector<tuple<bool, int,int>> result; for(int i = 2 ; i <= n ; i++){ for(int j = 0 ; j < v[i].size() ; j++){ int sasiad = v[i][j]; if(sasiad > i){ result.push_back({false, i, sasiad}); } } } return result; } int main(){ ios_base::sync_with_stdio(0); cin >> n; vector<tuple<bool, int,int>> p1; vector<tuple<bool, int,int>> u2; for(int wczytanie = 0 ; wczytanie < 2 ; wczytanie++){ cin >> k; for(int i = 1 ; i <= n ; i++){ v[i].clear(); } for(int i = 0 ; i < k ; i++){ cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } vector<tuple<bool, int,int>> promyki = dodaj_promyki(); vector<tuple<bool, int,int>> usuniete = usun_graf(); if(wczytanie == 0){ // for(int i = 0 ; i < promyki.size() ; i++){ // cout << "+" << " " << get<1>(promyki[i]) << " " << get<2>(promyki[i]) << endl; // } // for(int i = 0 ; i < usuniete.size() ; i++){ // cout << "-" << " " << get<1>(usuniete[i]) << " " << get<2>(usuniete[i]) << endl; // } p1 = promyki; u2 = usuniete; } else{ int rozmiar = promyki.size() + usuniete.size() + p1.size() + u2.size(); cout << rozmiar << endl; for(int i = 0 ; i < p1.size() ; i++){ cout << "+" << " " << get<1>(p1[i]) << " " << get<2>(p1[i]) << endl; } for(int i = 0 ; i < u2.size() ; i++){ cout << "-" << " " << get<1>(u2[i]) << " " << get<2>(u2[i]) << endl; } for(int i = 0 ; i < usuniete.size() ; i++){ cout << "+" << " " << get<1>(usuniete[i]) << " " << get<2>(usuniete[i]) << endl; } for(int i = 0 ; i < promyki.size() ; i++){ cout << "-" << " " << get<1>(promyki[i]) << " " << get<2>(promyki[i]) << endl; } } } } |