frp

Код на B

frp
May 6th, 2011
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <map>
  4. #include <vector>
  5. #include <set>
  6. using namespace std;
  7. #define bool int
  8. vector<bool> make_inter(vector<bool> a1,vector<bool> a2)
  9. {
  10.     vector<bool> res(a1.size());
  11.     for(int i=0;i<a1.size();i++)res[i]=a1[i]&&a2[i];
  12.     return res;
  13. }
  14. vector<bool> do_xor(vector<bool> a1,vector<bool> a2)
  15. {
  16.     vector<bool> res(a1.size());
  17.     for(int i=0;i<a1.size();i++)res[i]=a1[i] xor a2[i];
  18.     return res;
  19. }
  20. vector<bool> do_int(vector<bool> inter,vector<bool> a)
  21. {
  22.     vector<bool> res(a.size());
  23.     for(int i=0;i<a.size();i++)res[i]=(!inter[i])&&a[i];
  24.     return res;
  25. }
  26. int main()
  27. {
  28.     int n;
  29.     cin>>n;
  30.     if(n==2)
  31.     {
  32.         int k;
  33.         cin>>k;
  34.         vector<int> a(k);
  35.         for(int i=0;i<k;i++)cin>>a[i];
  36.         cout<<"1 "<<a[0]<<'\n';
  37.         cout<<k-1;
  38.         for(int i=1;i<k;i++)
  39.             cout<<" "<<a[i];
  40.         cout<<"\n";
  41.         return 0;
  42.     }
  43.     vector<vector<int> > a(n*(n-1)/2);
  44.     map<int,int> c1,c2;
  45.     int nn=0;
  46.     for(int i=0;i<n*(n-1)/2;i++)
  47.     {
  48.         int m;
  49.         cin>>m;
  50.         a[i].resize(m);
  51.         for(int j=0;j<m;j++)
  52.         {
  53.             int k;cin>>k;
  54.             if(c1.find(k)==c1.end())
  55.             {
  56.                 c1.insert(make_pair(k,nn));
  57.                 c2.insert(make_pair(nn,k));
  58.                 nn++;
  59.             }
  60.             a[i][j]=c1[k];
  61.         }
  62.     }
  63.     vector<vector<bool> > ac(a.size(),vector<bool>(nn));
  64.     for(int i=0;i<a.size();i++)
  65.         for(int j=0;j<a[i].size();j++)
  66.             ac[i][a[i][j]]=true;
  67.     vector<bool> inter0;
  68.     for(int i=1;i<a.size();i++)
  69.     {
  70.         inter0=make_inter(ac[0],ac[i]);
  71.         bool zsz=false;
  72.         for(int i=0;i<inter0.size();i++)if(inter0[i]){zsz=true;break;}
  73.         if(zsz)break;
  74.     }
  75.     vector<vector<bool> > res;
  76.     res.push_back(inter0);
  77.     for(int i=0;i<a.size();i++)
  78.     {
  79.         vector<bool> inter=make_inter(inter0,ac[i]);
  80.         bool zsz=true;
  81.         for(int j=0;j<inter.size();j++)if(inter[j]){zsz=false;break;}
  82.         if(zsz)continue;
  83.         vector<bool> xor_i0=do_int(inter0,ac[i]);
  84.         for(int j=0;j<xor_i0.size();j++)if(xor_i0[j]){zsz=true;break;}
  85.         if(!zsz)continue;
  86.         res.push_back(xor_i0);
  87.     }
  88.     for(int i=0;i<res.size();i++)
  89.     {
  90.         vector<int> resc;
  91.         for(int j=0;j<res[i].size();j++)if(res[i][j])resc.push_back(c2[j]);
  92.         cout<<resc.size();
  93.         for(int j=0;j<resc.size();j++)cout<<" "<<resc[j];
  94.         cout<<'\n';
  95.     }
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment