Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long int
- #define pb push_back
- #define se second
- #define fi first
- using namespace std;
- int dx[8] = { 1, -1, 0, 0, 1, -1, 1, -1 };
- int dy[8] = { 0, 0, 1, -1, 1, -1, -1, 1 };
- /*#include<ext/pb_ds/assoc_container.hpp>
- #include<ext/pb_ds/tree_policy.hpp>
- using namespace __gnu_pbds;
- typedef tree <
- pair<int ,int>,
- null_type,
- less<pair<int ,int>>,
- rb_tree_tag,
- tree_order_statistics_node_update> ordered_set;
- */
- const ll mod = 1e9+7;
- const int N = 1e6+10;
- vector<pair<int, int>>vec[N];
- int dis1[N], dis2[N], dis3[N];
- void clr(int n)
- {
- for(int i=0;i<=n;i++)
- {
- vec[i].clear();
- dis1[i] = 0;
- dis2[i] = 0;
- dis3[i] = 0;
- }
- }
- void dfs(int node, int par = -1)
- {
- for(auto [u, w]: vec[node])
- {
- if(u==par) continue;
- dis1[u] = max(dis1[u], dis1[node]+w);
- dfs(u, node);
- }
- }
- void dfs1(int node, int par = -1)
- {
- for(auto [u, w]: vec[node])
- {
- if(u==par) continue;
- dis2[u] = max(dis2[u], dis2[node]+w);
- dfs1(u, node);
- }
- }
- void dfs2(int node, int par = -1)
- {
- for(auto [u, w]: vec[node])
- {
- if(u==par) continue;
- dis3[u] = max(dis3[u], dis3[node]+w);
- dfs2(u, node);
- }
- }
- void solve(int tc)
- {
- int n,i,j,u,v,w;
- cin>>n;
- clr(n);
- for(i=0;i<n-1;i++)
- {
- cin>>u>>v>>w;
- vec[u].pb({v, w});
- vec[v].pb({u, w});
- }
- dfs(0);
- int mx = -1, id = 0;
- for(i=0;i<n;i++)
- {
- if(dis1[i]>mx)
- {
- mx = dis1[i];
- id = i;
- }
- }
- dfs1(id);
- mx = -1, id = 0;
- for(i=0;i<n;i++)
- {
- if(dis2[i]>mx)
- {
- mx = dis2[i];
- id = i;
- }
- }
- dfs2(id);
- cout<<"Case "<<tc<<":\n";
- for(i=0;i<n;i++) cout<<max(dis2[i], dis3[i])<<"\n";
- }
- int32_t main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- //pre();
- int tc = 1;
- cin>>tc;
- for(int i=1;i<=tc;i++)
- {
- solve(i);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment