Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- #include <queue>
- #include <set>
- #include <map>
- #include <cstdio>
- #include <deque>
- #include <cstdlib>
- #include <cctype>
- #include <cmath>
- #include <cstring>
- using namespace std;
- typedef unsigned long long LL;
- #define FOR(k,a,b) for(int k(a); k < (b); ++k)
- #define FORD(k,a,b) for(int k(a-1); k >= (b); --k)
- #define REP(k,a) for(int k=0; k < (a); ++k)
- #define ABS(a) ((a)>0?(a):-(a))
- int d1(int x,int y,int n)
- {
- return n+y-x;
- }
- int d2(int x,int y,int n)
- {
- return x+y;
- }
- int main()
- {
- int n;
- cin >> n;
- vector<int> x(n),y(n);
- vector<vector<int> > v(n),w;
- REP(i,n)
- {
- cin >> x[i] >> y[i];
- --x[i];--y[i];
- v[x[i]].push_back(y[i]);
- v[y[i]].push_back(x[i]);
- }
- REP(i,n)
- {
- sort(v[i].begin(),v[i].end());
- }
- w=v;
- bool ok=true;
- while(ok)
- {
- ok=false;
- REP(i,n)
- {
- if(v[i].size()==1)
- {
- vector<int>& mv=v[v[i][0]];
- if(i!=mv.back())
- {
- vector<int>::iterator it=lower_bound(mv.begin(),mv.end(),i);
- int idx=it-mv.begin();
- swap(mv[idx],mv[mv.size()-1]);
- }
- mv.resize(mv.size()-1);
- ok=true;
- v[i].clear();
- }
- }
- }
- vector<int> d(n,1e9);
- deque<int> q;
- vector<bool> c(n);
- REP(i,n)
- {
- if(v[i].size())
- {
- d[i]=0;
- c[i]=true;
- q.push_back(i);
- }
- }
- while(q.size())
- {
- int t=q.front();
- q.pop_front();
- REP(i,w[t].size())
- {
- if(!c[w[t][i]])
- {
- c[w[t][i]]=true;
- d[w[t][i]]=d[t]+1;
- q.push_back(w[t][i]);
- }
- }
- }
- REP(i,n)
- cout << d[i] << " ";
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment