// 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.
This color-coded navigation is brilliant for tracking odds visually! For a smoother entry into their ecosystem, try the 22bet download apk to bypass browser delays and dive straight into the action.
This UI feels super intuitive! The blend of casino fun with betting depth is smart UX design. Check out sporting bet com for more structured action-it’s a great system build! ✨🎰
The operational flow here is solid, especially the localized payment integration. For deeper dives, check out vc999 ডাউনলোড; it complements the platform’s robust structure well.