#include <bits/stdc++.h>
using namespace std;
//define int long long
constexpr int maxN = 3e4+7;
int n,m1,m2,dist[maxN];
bool ok[maxN];
pair<int,int>edges1[maxN*2],edges2[maxN*2];
vector<int>v[maxN];
struct operacja{
char typ;
int a,b;
void wypisz(){
cout<<typ<<' '<<a<<' '<<b<<"\n";
}
};
vector<operacja>ans;
void bfs(){
dist[1] = 1;
queue<int>q;
q.push(1);
while(!q.empty()){
int x = q.front();
q.pop();
if(dist[x] > 2)
ans.push_back({'+',x,1});
for(int a:v[x]){
if(!dist[a]){
dist[a] = dist[x] + 1;
q.push(a);
}
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
cin>>m1;
for(int i=1,a,b;i<=m1;i++){
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
edges1[i] = {a,b};
}
cin>>m2;
for(int i=1,a,b;i<=m2;i++){
cin>>a>>b;
edges2[i] = {a,b};
}
bfs();
for(int i=1,a,b;i<=m1;i++){
a = edges1[i].first, b = edges1[i].second;
if(a == 1 || b == 1)
continue;
ans.push_back({'-',a,b});
}
for(int i=1,a,b;i<=m2;i++){
a = edges2[i].first, b = edges2[i].second;
if(a == 1 || b == 1){
ok[a] = true;
ok[b] = true;
continue;
}
ans.push_back({'+',a,b});
}
for(int i=2;i<=n;i++){
if(!ok[i]){
ans.push_back({'-',1,i});
}
}
cout<<ans.size()<<"\n";
for(int i=0;i<ans.size();i++)
ans[i].wypisz();
}
/*
4
3
1 2
3 4
3 2
4
1 4
1 2
2 3
3 4
*/
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 | #include <bits/stdc++.h> using namespace std; //define int long long constexpr int maxN = 3e4+7; int n,m1,m2,dist[maxN]; bool ok[maxN]; pair<int,int>edges1[maxN*2],edges2[maxN*2]; vector<int>v[maxN]; struct operacja{ char typ; int a,b; void wypisz(){ cout<<typ<<' '<<a<<' '<<b<<"\n"; } }; vector<operacja>ans; void bfs(){ dist[1] = 1; queue<int>q; q.push(1); while(!q.empty()){ int x = q.front(); q.pop(); if(dist[x] > 2) ans.push_back({'+',x,1}); for(int a:v[x]){ if(!dist[a]){ dist[a] = dist[x] + 1; q.push(a); } } } } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; cin>>m1; for(int i=1,a,b;i<=m1;i++){ cin>>a>>b; v[a].push_back(b); v[b].push_back(a); edges1[i] = {a,b}; } cin>>m2; for(int i=1,a,b;i<=m2;i++){ cin>>a>>b; edges2[i] = {a,b}; } bfs(); for(int i=1,a,b;i<=m1;i++){ a = edges1[i].first, b = edges1[i].second; if(a == 1 || b == 1) continue; ans.push_back({'-',a,b}); } for(int i=1,a,b;i<=m2;i++){ a = edges2[i].first, b = edges2[i].second; if(a == 1 || b == 1){ ok[a] = true; ok[b] = true; continue; } ans.push_back({'+',a,b}); } for(int i=2;i<=n;i++){ if(!ok[i]){ ans.push_back({'-',1,i}); } } cout<<ans.size()<<"\n"; for(int i=0;i<ans.size();i++) ans[i].wypisz(); } /* 4 3 1 2 3 4 3 2 4 1 4 1 2 2 3 3 4 */ |
English