解いた問題

8/24/2012

SRM435 Div2 Medium

500

やるだけ。



  1. class CellRemoval {  
  2. public:  
  3.   int cellsLeft(vector <int> p, int del)  
  4.   {  
  5.     if (p[del] == -1) return 0;  
  6.   
  7.     const int size = p.size();  
  8.     int cnt[size];  
  9.     fill(cnt, cnt + size, 0);  
  10.   
  11.     for (int i = 0; i < size; ++i) {  
  12.       for (int n = i; p[n] != -1; n = p[n]) {  
  13.         ++cnt[n];  
  14.       }  
  15.     }  
  16.   
  17.     int ret = count(cnt, cnt + size, 1);  
  18.     for (int i = 0; i < size; ++i) {  
  19.       if (cnt[i] != 1) continue;  
  20.       for (int n = i; p[n] != -1; n = p[n]) {  
  21.         if (n == del) {  
  22.           --ret;  
  23.           break;  
  24.         }  
  25.       }  
  26.     }  
  27.   
  28.     return ret;  
  29.   }  
  30. };