iscsi

Cf 95 D

Nov 25th, 2011
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. #include <queue>
  7. #include <set>
  8. #include <map>
  9. #include <cstdio>
  10. #include <deque>
  11. #include <cstdlib>
  12. #include <cctype>
  13. #include <cmath>
  14. #include <cstring>
  15.  
  16.  
  17. using namespace std;
  18. typedef unsigned long long LL;
  19. #define FOR(k,a,b) for(int k(a); k < (b); ++k)
  20. #define FORD(k,a,b) for(int k(a-1); k >= (b); --k)
  21. #define REP(k,a) for(int k=0; k < (a); ++k)
  22. #define ABS(a) ((a)>0?(a):-(a))
  23.  
  24. int d1(int x,int y,int n)
  25. {
  26.     return n+y-x;
  27. }
  28.  
  29. int d2(int x,int y,int n)
  30. {
  31.     return x+y;
  32. }
  33.  
  34. int main()
  35. {
  36.     int n;
  37.     cin >> n;
  38.     vector<int> x(n),y(n);
  39.     vector<vector<int> > v(n),w;
  40.     REP(i,n)
  41.     {
  42.         cin >> x[i] >> y[i];
  43.         --x[i];--y[i];
  44.         v[x[i]].push_back(y[i]);
  45.         v[y[i]].push_back(x[i]);
  46.     }
  47.     REP(i,n)
  48.     {
  49.         sort(v[i].begin(),v[i].end());
  50.     }
  51.     w=v;
  52.     bool ok=true;
  53.     while(ok)
  54.     {
  55.         ok=false;
  56.         REP(i,n)
  57.         {
  58.             if(v[i].size()==1)
  59.             {
  60.                 vector<int>& mv=v[v[i][0]];
  61.                 if(i!=mv.back())
  62.                 {
  63.                     vector<int>::iterator it=lower_bound(mv.begin(),mv.end(),i);
  64.                     int idx=it-mv.begin();
  65.  
  66.                     swap(mv[idx],mv[mv.size()-1]);
  67.                 }
  68.                 mv.resize(mv.size()-1);
  69.                 ok=true;
  70.                 v[i].clear();
  71.             }
  72.         }
  73.     }
  74.     vector<int> d(n,1e9);
  75.     deque<int> q;
  76.     vector<bool> c(n);
  77.     REP(i,n)
  78.     {
  79.         if(v[i].size())
  80.         {
  81.             d[i]=0;
  82.             c[i]=true;
  83.             q.push_back(i);
  84.         }
  85.     }
  86.     while(q.size())
  87.     {
  88.         int t=q.front();
  89.         q.pop_front();
  90.         REP(i,w[t].size())
  91.         {
  92.             if(!c[w[t][i]])
  93.             {
  94.                 c[w[t][i]]=true;
  95.                 d[w[t][i]]=d[t]+1;
  96.                 q.push_back(w[t][i]);
  97.             }
  98.         }
  99.     }
  100.     REP(i,n)
  101.         cout << d[i] << " ";
  102.     cout << endl;
  103.  
  104.    
  105.     return 0;
  106. }
  107.  
Advertisement
Add Comment
Please, Sign In to add comment