Advertisement
Guest User

Probably doesn't work

a guest
Mar 11th, 2014
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. pair<int,int> deg[500]; // {degree, index}
  2.  
  3. void run(){
  4.     int n; cin>>n;
  5.     for (int i=0; i<=n; i++) cin>>deg[i].first, deg[i].second=i+1;
  6.     sort(deg,deg+n);
  7.  
  8.     vector<int> res;
  9.  
  10.     for (int i=0; i<=n; i++){
  11.         ll sum=0;
  12.         ll capsum=0;
  13.  
  14.         // copy in degrees in decreasing order
  15.         vector<int> all;
  16.         for (int j=n; j>=0; --j) if (i!=j) all.push_back(deg[j].first), sum+=deg[j].first;
  17.  
  18.         // check that degree sum is even
  19.         if (sum%2!=0) continue;
  20.  
  21.         bool ok=true;
  22.         ll capgt=-1; // number of items greater than the cap
  23.         for (int k=n; k>=1; k--){
  24.             // update sums of deg[1..k]
  25.             if (k<n){
  26.                 sum-=all[k];
  27.             }
  28.  
  29.             // update sums of min(deg[k+1..n],k)
  30.             if (k<n){
  31.                 if (all[k]>k) capgt=max(capgt, (ll)(k+1));
  32.                 if (capgt!=-1){
  33.                     while (capgt<n and all[capgt]>k) ++capgt;
  34.                     capsum-=(capgt-k);
  35.                 }
  36.                 capsum+=min(all[k],k+1);
  37.             }
  38.  
  39.             // check erdos-gallai theorem holds
  40.             ok &= (sum <= k*(k-1) + capsum);
  41.         }
  42.  
  43.         if (ok) res.push_back(deg[i].second);
  44.     }
  45.  
  46.     sort(res.begin(),res.end());
  47.     cout<<res.size()<<endl;
  48.     for (int i=0; i<res.size(); i++) cout<<res[i]<<endl;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement