Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <vector>
- #include <set>
- using namespace std;
- #define bool int
- vector<bool> make_inter(vector<bool> a1,vector<bool> a2)
- {
- vector<bool> res(a1.size());
- for(int i=0;i<a1.size();i++)res[i]=a1[i]&&a2[i];
- return res;
- }
- vector<bool> do_xor(vector<bool> a1,vector<bool> a2)
- {
- vector<bool> res(a1.size());
- for(int i=0;i<a1.size();i++)res[i]=a1[i] xor a2[i];
- return res;
- }
- vector<bool> do_int(vector<bool> inter,vector<bool> a)
- {
- vector<bool> res(a.size());
- for(int i=0;i<a.size();i++)res[i]=(!inter[i])&&a[i];
- return res;
- }
- int main()
- {
- int n;
- cin>>n;
- if(n==2)
- {
- int k;
- cin>>k;
- vector<int> a(k);
- for(int i=0;i<k;i++)cin>>a[i];
- cout<<"1 "<<a[0]<<'\n';
- cout<<k-1;
- for(int i=1;i<k;i++)
- cout<<" "<<a[i];
- cout<<"\n";
- return 0;
- }
- vector<vector<int> > a(n*(n-1)/2);
- map<int,int> c1,c2;
- int nn=0;
- for(int i=0;i<n*(n-1)/2;i++)
- {
- int m;
- cin>>m;
- a[i].resize(m);
- for(int j=0;j<m;j++)
- {
- int k;cin>>k;
- if(c1.find(k)==c1.end())
- {
- c1.insert(make_pair(k,nn));
- c2.insert(make_pair(nn,k));
- nn++;
- }
- a[i][j]=c1[k];
- }
- }
- vector<vector<bool> > ac(a.size(),vector<bool>(nn));
- for(int i=0;i<a.size();i++)
- for(int j=0;j<a[i].size();j++)
- ac[i][a[i][j]]=true;
- vector<bool> inter0;
- for(int i=1;i<a.size();i++)
- {
- inter0=make_inter(ac[0],ac[i]);
- bool zsz=false;
- for(int i=0;i<inter0.size();i++)if(inter0[i]){zsz=true;break;}
- if(zsz)break;
- }
- vector<vector<bool> > res;
- res.push_back(inter0);
- for(int i=0;i<a.size();i++)
- {
- vector<bool> inter=make_inter(inter0,ac[i]);
- bool zsz=true;
- for(int j=0;j<inter.size();j++)if(inter[j]){zsz=false;break;}
- if(zsz)continue;
- vector<bool> xor_i0=do_int(inter0,ac[i]);
- for(int j=0;j<xor_i0.size();j++)if(xor_i0[j]){zsz=true;break;}
- if(!zsz)continue;
- res.push_back(xor_i0);
- }
- for(int i=0;i<res.size();i++)
- {
- vector<int> resc;
- for(int j=0;j<res[i].size();j++)if(res[i][j])resc.push_back(c2[j]);
- cout<<resc.size();
- for(int j=0;j<resc.size();j++)cout<<" "<<resc[j];
- cout<<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment