Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define PB push_back
- #define ZERO (1e-10)
- #define INF (1<<29)
- #define CL(A,I) (memset(A,I,sizeof(A)))
- #define DEB printf("DEB!\n");
- #define D(X) cout<<" "<<#X": "<<X<<endl;
- #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
- typedef long long ll;
- typedef long double ld;
- typedef pair<ll,ll> pll;
- typedef vector<int> vi;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- #define IN(n) int n;scanf("%d",&n);
- #define FOR(i, m, n) for (int i(m); i < n; i++)
- #define REP(i, n) FOR(i, 0, n)
- #define F(n) REP(i, n)
- #define FF(n) REP(j, n)
- #define FT(m, n) FOR(k, m, n)
- #define aa first
- #define bb second
- void ga(int N,int *A){F(N)scanf("%d",A+i);}
- #define MX (100016)
- vi g[MX];
- int N,a,b,R,t[MX],L[MX];
- //FW
- struct FW{
- ll t[MX],S;
- void clr(int s){CL(t,0);S=s;}
- void inc(int i,int d){for(;i<S;i|=i+1)t[i]+=d;}
- ll sum(int i){ll s(0);while(~i)s+=t[i],i&=i+1,--i;return s;}
- ll gt(int l,int r){return sum(r)-sum(l-1);}
- }Z;
- //DECO!
- ll dp[MX];
- int S[MX],D[MX],F[MX],T[MX],C,V[MX],A,I[MX];
- void pre(int u=0,int d=0){
- int X=-INF;
- S[u]=1,D[u]=d++,V[T[u]=C++]=u,I[u]=-1;
- for(auto&h:g[u]){
- pre(h,d);
- if(S[h]>X)X=S[h],I[u]=h;
- S[u]+=S[h];
- }
- F[u]=C;
- }
- void clr(int u){
- Z.inc(L[u],-t[u]);
- }
- void ats(int u,int v){
- Z.inc(L[u],t[u]);
- }
- ll uca(int u,int v){
- return Z.sum(L[u]-1);
- }
- void dfs(int u,bool x){
- for(auto&h:g[u])if(h^I[u])dfs(h,1);
- if(~I[u])dfs(I[u],0);
- for(auto&h:g[u])if(h^I[u]){
- FT(T[h],F[h])ats(V[k],u);
- }
- dp[u]=max(dp[u],uca(u,u)),ats(u,u);
- if(x)FT(T[u],F[u])clr(V[k]);
- }
- void CLR(){for(auto&h:g)h.clear();CL(dp,C=0);}
- int main(void){
- while(~scanf("%d",&N)){
- CLR(),Z.clr(MX-3);
- F(N){
- scanf("%d%d%d",&a,L+i,t+i);
- if(~a)g[--a].PB(i);
- else R=i;
- }
- pre(R),dfs(R,1);
- F(N)printf("%lld\n",dp[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment