結果

問題 No.277 根掘り葉掘り
ユーザー Tawara
提出日時 2015-09-05 02:15:30
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 207 ms / 3,000 ms
コード長 838 bytes
コンパイル時間 660 ms
コンパイル使用メモリ 65,372 KB
実行使用メモリ 13,232 KB
最終ジャッジ日時 2024-07-19 03:35:03
合計ジャッジ時間 3,764 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 18
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>

using namespace std;

typedef vector <int> VI;
typedef vector <VI> VVI;

#define range(i,a,b) for(int i=(a); i < (b); i++)
#define rep(i,n) range(i,0,n)
#define each(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)

int main(){
	int N,x,y,d=0,len;
	VVI e;
	VI S,b,h,nb,nh;
	cin >> N;
	e = VVI(N);
	S = VI(N,N);
	rep(i,N-1){
		cin >> x >> y;
		x--; y--;
		e[x].push_back(y);
		e[y].push_back(x);
	}
	b.push_back(0); h.push_back(0);
	rep(i,N) if(e[i].size() == 1){b.push_back(i); h.push_back(i);}
	
	while ((len=b.size()) > 0){
		nb.clear(); nh.clear();
		rep(i,len){
			if(d >= S[h[i]]) continue;
			S[h[i]] = d;
			each(nxt, e[h[i]]){
				if(*nxt == b[i]) continue;
				nb.push_back(h[i]); nh.push_back(*nxt);
			}
		}
		d++; b=nb; h=nh;
	}
	rep(i,N) cout << S[i] << endl;
	return 0;
}
0