yukicoder 277 根掘り葉掘り
問題
方針
木の外にもう $1$ つの頂点 $v$ を作って,根と葉に重さ $0$ の辺をつなぎ, $v$ からダイクストラ(BFS)して出力するだけ.
なぜ本番に思いつかなかったんだ…
実装
signed main(){
int N;
cin >> N;
Graph g(N+1);
rep(i,N-1){
int a,b;
cin >> a >> b;
a--, b--;
g[a].eb(a,b,1);
g[b].eb(b,a,1);
}
int s = N;
rep(i,N) if(g[i].size()==1) g[s].eb(s,i,0);
g[s].eb(s,0,0);
vi d = dijkstra(g,s);
rep(i,N) cout << d[i] << endl;
}