#include <bits/stdc++.h> using namespace std; unordered_map<int,int>czerwoni,nieb; vector<pair<int,int>>cz,q; vector<int>pol[30001]; bool odw[30001]; void zdfs(int w){ odw[w]=1; for(int i=0;i<(int)pol[w].size();++i){ if(!odw[pol[w][i]]){ int a=w,b=pol[w][i]; if(a>b)swap(a,b); if(!nieb[(1<<15)+pol[w][i]])q.emplace_back(1,pol[w][i]);//gdy q.first>0 to wypisać + inaczej wypisać minus zdfs(pol[w][i]); if(a!=1){ if(!czerwoni[(a<<15)+b]){ q.emplace_back(-a,b); } } } } } void cdfs(int w){ odw[w]=1; for(int i=0;i<(int)pol[w].size();++i){ if(!odw[pol[w][i]]){ cdfs(pol[w][i]); if(!czerwoni[(1<<15)+pol[w][i]])q.emplace_back(-1,pol[w][i]); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,m,a,b; cin>>n>>m; for(int i=0;i<m;++i){ cin>>a>>b; if(a>b)swap(a,b);//a<b nieb[(a<<15)+b]=1; pol[a].emplace_back(b); pol[b].emplace_back(a); } cin>>m; for(int i=0;i<m;++i){ cin>>a>>b; if(a>b)swap(a,b);//a<b czerwoni[(a<<15)+b]=1; cz.emplace_back(a,b); } odw[1]=1; zdfs(1); for(int i=1;i<=n;++i)pol[i].clear(); for(int i=0;i<m;++i){ a=cz[i].first;b=cz[i].second; if(a!=1&&!nieb[(a<<15)+b])q.emplace_back(cz[i]); pol[a].emplace_back(b); pol[b].emplace_back(a); } for(int i=1;i<=n;++i)odw[i]=false; cdfs(1); cout<<q.size()<<"\n"; for(int i=0;i<(int)q.size();++i){ if(q[i].first>0)cout<<'+'; else cout<<'-'; cout<<" "<<abs(q[i].first)<<" "<<q[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 | #include <bits/stdc++.h> using namespace std; unordered_map<int,int>czerwoni,nieb; vector<pair<int,int>>cz,q; vector<int>pol[30001]; bool odw[30001]; void zdfs(int w){ odw[w]=1; for(int i=0;i<(int)pol[w].size();++i){ if(!odw[pol[w][i]]){ int a=w,b=pol[w][i]; if(a>b)swap(a,b); if(!nieb[(1<<15)+pol[w][i]])q.emplace_back(1,pol[w][i]);//gdy q.first>0 to wypisać + inaczej wypisać minus zdfs(pol[w][i]); if(a!=1){ if(!czerwoni[(a<<15)+b]){ q.emplace_back(-a,b); } } } } } void cdfs(int w){ odw[w]=1; for(int i=0;i<(int)pol[w].size();++i){ if(!odw[pol[w][i]]){ cdfs(pol[w][i]); if(!czerwoni[(1<<15)+pol[w][i]])q.emplace_back(-1,pol[w][i]); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,m,a,b; cin>>n>>m; for(int i=0;i<m;++i){ cin>>a>>b; if(a>b)swap(a,b);//a<b nieb[(a<<15)+b]=1; pol[a].emplace_back(b); pol[b].emplace_back(a); } cin>>m; for(int i=0;i<m;++i){ cin>>a>>b; if(a>b)swap(a,b);//a<b czerwoni[(a<<15)+b]=1; cz.emplace_back(a,b); } odw[1]=1; zdfs(1); for(int i=1;i<=n;++i)pol[i].clear(); for(int i=0;i<m;++i){ a=cz[i].first;b=cz[i].second; if(a!=1&&!nieb[(a<<15)+b])q.emplace_back(cz[i]); pol[a].emplace_back(b); pol[b].emplace_back(a); } for(int i=1;i<=n;++i)odw[i]=false; cdfs(1); cout<<q.size()<<"\n"; for(int i=0;i<(int)q.size();++i){ if(q[i].first>0)cout<<'+'; else cout<<'-'; cout<<" "<<abs(q[i].first)<<" "<<q[i].second<<"\n"; } } |