// compile: make data
// run: ./data < data.in
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#include <debug/codeforces.h>
#define debug(x...) _debug_print(#x, x);
#define Debug(x...) _debug_print_format(#x, x);
#else
#define debug(x...)
#define Debug(x...)
#endif
template<typename...Args> void print_(Args...args){((cout<<args<<" "),...)<<endl;}
#define VI vector<int>
#define VII vector<vector<int>>
#define VIII vector<vector<vector<int>>>
#define rep(i,a,b) for(int i=(a);i<(int)(b);++i)
#define sz(v) ((int)(v).size())
#define print(...) print_(__VA_ARGS__);
#define FIND(a, x) ((find(a.begin(),a.end(),(x))!=a.end())?1:0)
#define cmin(x,...) x=min({(x), __VA_ARGS__})
#define cmax(x,...) x=max({(x), __VA_ARGS__})
#define INTMAX (int)(9223372036854775807)
#define INF (int)(1152921504606846976)
#define NaN (int)(0x8b88e1d0595d51d1)
#define double long double
#define int long long
#define MAXN 200010
struct tree {
int n;
vector<vector<int>> e;
struct node {
vector<node*> ch;
node* parent = nullptr;
int size;
};
vector<node> vertex;
node *root;
tree(int V) {
n = V;
e.resize(n);
vertex.resize(n);
}
void add_edge(int u, int v) {
e[u].push_back(v), e[v].push_back(u);
}
int ind(node *x) {return x - &vertex[0]; }
void build(int rt = 0) {
function<void(int, int)> dfs = [&](int u, int pre) {
vertex[u].size = 1;
for (int v: e[u]) {
if (v == pre) continue;
vertex[u].ch.push_back(&vertex[v]);
vertex[v].parent = &vertex[u];
dfs(v, u);
vertex[u].size += vertex[v].size;
}
};
root = &vertex[rt];
dfs(rt, -1);
}
pair<int, pair<int, int>> diameter() {
int maxd = -INF, s = -1, t = -1;
vector<int> vis(n, 0);
function<void(int, int, int&)> dfs = [&](int u, int dis, int &st) -> void {
vis[u] = 1;
if (dis > maxd) maxd = dis, st = u;
for (auto v: e[u]) if (!vis[v]) dfs(v, dis+1, st);
};
dfs(ind(root), 0, s);
maxd = -INF, fill(vis.begin(), vis.end(), 0);
dfs(s, 0, t);
return {maxd, {s, t}};
}
void graphviz_dump(int plus = 0, string filename = "graph.dot") {
FILE *f = fopen(filename.c_str(), "w");
fprintf(f, "digraph Tree {\n");
rep(i, 0, n) {
node *x = &vertex[i];
fprintf(f, " %lld;\n");
}
rep(i, 0, n) {
node *x = &vertex[i];
for (auto y: x->ch) {
fprintf(f, " %ld -> %ld;\n", x - &vertex[0], y - &vertex[0]);
}
}
fprintf(f, "}\n");
}
vector<int> ssp(int s) {
vector<int> vis(n, 0), dis(n, INF);
dis[s] = 0;
function<void(int)> dfs = [&](int u) -> void {
vis[u] = 1;
for (auto v: e[u]) {
if (vis[v]) continue;
dis[v] = dis[u] + 1;
dfs(v);
}
};
dfs(s);
return dis;
}
void solve() {
auto [_, vs] = diameter();
auto [s, t] = vs;
auto diss = ssp(s);
auto dist = ssp(t);
rep(i, 0, n) cout << max(diss[i], dist[i]) << " \n"[i==n-1];
}
};
int32_t main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int n; cin >> n;
tree g(n);
rep(i, 0, n-1) {
int u, v; cin >> u >> v; --u, --v;
g.add_edge(u, v);
}
g.build(0);
g.solve();
return 0;
}
Gave taiwin99 a shot last night. Won a few bucks and had a laugh. The site’s a little basic, but who cares when you’re winning? I like it. taiwin99
Yo, 188betthethao got my back when I need a quick bet. Straight and to the point, just how I like it. Check it out here: 188betthethao
Okay, so I took a chance on vmaxx. The interface is clean and easy to use. Worth a try if you’re looking for something new.
Interesting read! Understanding RTP & house edge is key to smart play. Platforms like gg panalo download prioritize transparency, which is great for informed decisions. Good analysis!
That’s a great point about the evolution of gaming! It’s cool to see how AiScore builds on centuries of casino tradition with modern tech. For easy access, check out the aiscore download apk – convenient for any player! Really enjoying the platform’s diverse options.
That’s a solid point about value betting – crucial for long-term success! Seeing platforms like 6win login cater to local payment options like GCash really improves accessibility for Filipino players, making it easier to get in the game. 👍
Tree distance problems sharpen computational thinking skills that translate beautifully to real-world optimization challenges. Just as mastering DFS requires strategic depth, modern platforms like kkkk ph app demonstrate how algorithmic excellence creates seamless user experiences in gaming ecosystems.